2016-10-12 3 views
-1

처음에는 빈 arraylist로 리사이클 러 뷰 어댑터를 초기화합니다. 그럼 나중에 한 번 나는 notifyDataSetChanged()를 호출하여 어댑터를 업데이트하려고하지만 난 그냥 다음과 같은 어댑터를 업데이트 API에서 데이터를 가져 오는 한 후빈 Recycler 뷰가 새 데이터로 업데이트되지 않습니다.

void initRecyclerView() 
    {  
      myList = new ArrayList<>(); 
      myRecyclerAdapter = new myRecyclerAdapter(getActivity(), myList, ""); 
      myRecyclerView.setAdapter(myRecyclerAdapter); 
      linearLayoutManager = new LinearLayoutManager(getActivity()); 
      myRecyclerView.setHasFixedSize(true); 
      myRecyclerView.setLayoutManager(linearLayoutManager); 
    } 

을 발사 내 어댑터 콜백 방법 중 어느 것도 점점되지 않는 API에서 데이터를 가져 오기 : 모든

void updateRecyclerView(ArrayList<Data> newList) 
    { 
     if (myList.isEmpty()) 
        linearLayoutManager.removeAllViews(); 
       myList.clear(); 
       myList.addAll(newList);    
       myRecyclerAdapter.notifyDataSetChanged(); 
    } 
+0

'updateRecyclerView'가 호출되었는지 확인 했습니까? 왜 당신은 단지 recyclerview를 업데이 트하려는 동안'linearLayoutManager'의 모든 뷰를 제거합니까? 또한, 'if'가 단지 1 개의 문장을 가지고있을 때조차도 대괄호를 사용하는 것이 더 낫습니다. –

+0

'updateRecyclerView'가 newList에 새로운 레코드 세트로 호출되고 있습니다. 'linearLayoutManager'의'removeAllViews '를 제거했습니다. 여전히 작동하지 않습니다. – MohanRaj

+0

어댑터 코드도 게시 할 수 있습니까? –

답변

1

가장 비용이 많이 드는 실수를 저질렀 고 다른 측면에서 보는 대신 다른 것을 생각해 보았습니다.

나는 RecyclerView을 랩하는 SwipeRefreshLayout이었습니다.

API 호출을 통해 데이터를 다운로드 한 후에는 setRefreshing(false)을 사용해야합니다. 대신 setVisibility(VIEW.GONE) on my mSwipeRefreshLayout`을 사용했습니다.

이 가시성 변경 SwipeRefreshLayoutRecyclerView에 영향을 미칩니다.

아무도이 실수를하지 않기를 바랍니다. 어쩌면 누군가가이 작은 실수를 범할 수도 있습니다. 따라서 대답을 승인 된 대답으로 표시하십시오.

3
void updateRecyclerView(ArrayList<Data> newList) 
    { 
//you don't have to removeviews 
     // if (myList.isEmpty()) 
       // linearLayoutManager.removeAllViews(); 
       myList.clear(); 
       myList.addAll(newList);    
       myRecyclerAdapter.notifyDataSetChanged(); 
    } 
+0

아직 채워지지 않습니다! notifyDataSetChanged()를 호출 한 후 어댑터에 아무런 영향이 없습니다. 모든 콜백 메소드에 로그인을 유지했습니다! 이상으로 샘플 데이터를 완벽하게 올바르게 작동하는 어댑터에 공급하려고했습니다! FYI : newList에 항목이 있습니다! 그것은 비어 있지 않습니다! – MohanRaj

1

먼저 나열하는 레이아웃 매니저 설정 한 다음 어댑터를 설정하려고 :

void initRecyclerView() 
{  
     linearLayoutManager = new LinearLayoutManager(getActivity()); 
     myRecyclerView.setHasFixedSize(true); 
     myRecyclerView.setLayoutManager(linearLayoutManager); 
     myList = new ArrayList<>(); 
     myRecyclerAdapter = new myRecyclerAdapter(getActivity(), myList, ""); 
     myRecyclerView.setAdapter(myRecyclerAdapter); 
} 

데이터 세트를 변경하거나 어댑터에 변경 사항을 알리려면 주 스레드에서 변경해야합니다.

runOnUiThread(new Runnable() { 
@Override 
public void run() { 
    myList.clear(); 
    myList.addAll(newList);    
    myRecyclerAdapter.notifyDataSetChanged(); 
} 
}); 
관련 문제