2017-01-27 2 views
1

내 요청을 페이지 매기기하는 REST 서비스가 있습니다 ... 내 recyclerview 20 itens에 삽입하고로드하기 전에 20 itens을 유지해야합니다.새 항목을 RecyclerView에 삽입하십시오.

이 내가 잘못

public void addItem(ArrayList<Veiculo> veiculosArray) { 
    if (veiculos != null) { 
     veiculos.clear(); 
     veiculos.addAll(veiculosArray); 
     notifyItemInserted(veiculos.size() - 1); 
    } else { 
     veiculos = veiculosArray; 
    } 
    notifyDataSetChanged(); 
} 

을하고있어 무엇

VeiculoRequestHelper.veiculosPaginatedRequest(Request.Method.GET, url, null, new Response.Listener<VeiculoPaginated>() { 
     @Override 
     public void onResponse(VeiculoPaginated response) { 
      AnalyticsTracker.getInstance().sendEvent(AnalyticsEnum.Category.MY_VEHICLE, AnalyticsEnum.Action.CLICK, AnalyticsEnum.Label.SUCCESS); 

      isLast = response.isLast(); 

      ArrayList<Veiculo> veiculoArrayList = new ArrayList<>(); 
      veiculoArrayList.addAll(response.getContent()); 

      veiculos = veiculoArrayList; 

      mAdapter.addItem(veiculos); 

      mRecyclerView.setAdapter(mAdapter); 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      AnalyticsTracker.getInstance().sendEvent(AnalyticsEnum.Category.MY_VEHICLE, AnalyticsEnum.Action.CLICK, AnalyticsEnum.Label.ERROR); 

      Toast.makeText(getActivity(), "Erro ao realizar listagem de veículos.", Toast.LENGTH_LONG).show(); 
     } 
    }); 

이 내 어댑터 방법은 새로운 itens를 추가 할 수 있습니다 ... ... 내 요청입니까? itens 삽입하지만 오래된 itens 유지하지 ... 도와주세요!

답변

1

이전 데이터는 addItem(ArrayList<Veiculo> veiculosArray)에서 삭제됩니다 :

if (veiculos != null) { 
    veiculos.clear(); // here they will be cleared 
    veiculos.addAll(veiculosArray); 
    notifyItemInserted(veiculos.size() - 1); 
} 

이전 항목을 유지하기 위해이 줄을 제거합니다.

+0

내가 veiculos.clear()를 제거하면; 모든 데이터를 삽입하지만, recyclerview는 마지막 항목을 유지하지 않고 시작합니다 ... –

0
당신의 onResponse에

: veiculoArrayListveiculos에 할당되고

ArrayList<Veiculo> veiculoArrayList = new ArrayList<>(); 
      veiculoArrayList.addAll(response.getContent()); 

      veiculos = veiculoArrayList; 

      mAdapter.addItem(veiculos); 

      mRecyclerView.setAdapter(mAdapter); 

는 무슨 일이 일어나고 있는지보고는, 새로운 20 개 항목이 지금 의미합니다. mAdapter.addItem(veiculos); 에와

veiculos.clear(); 
veiculos.addAll(veiculosArray); 

이제까지 취소됩니다 veiculos에 있었고, 새 목록 veiculosArray가 (새 20 개 항목을 의미)에 추가 될 것입니다 무슨 의미 당신의 addItem 방법 통과 veiculos. 새 항목을 추가하고 notifyDatasetChanged()을 지울 필요가 없습니다. 마지막 항목에 계속 집중하려면 recyclerView.smoothScrollToPosition (position)을 설정하기 만하면됩니다. 그리고 분명히 위치는 새 항목을 추가하기 전에 veiculos.size()가됩니다.

notifyItemRangeInserted(lastListSize, newList.size()); 
+0

veiculos.clear()를 제거하면; 그것은 모든 데이터를 삽입하지만, recyclerview 시작, 마지막 항목에 계속하지 ... –

+0

내 대답을 업데이 트, 캠은 마지막 항목으로 위치를 이동합니다. –

+0

@FelipeA. 'notifyItemRangeInserted (lastListSize, newList.size());'답변에서 이것을보십시오. –

관련 문제