2016-10-12 8 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`を使用しました。

この視界の変更SwipeRefreshLayoutは、RecyclerViewに影響します。

この間違いはありません。おそらく誰かがこの小さな間違いに遭遇するかもしれないので、私は答えを受け入れられた答えとします。

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()の呼び出し後、adapter.Iには何の効果もなく、すべてのコールバックメソッドにログインしていました!以上、サンプルデータを完全に正しく動作するアダプタにフィードしようとしました! 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(); 
} 
}); 
関連する問題