2016-11-30 11 views
0

のカスタムアダプタ内recyclerviewでカウントこのarraylistをrecyclerview用のカスタムアダプタに設定します。このアダプタの中で、最後のarraylistの内側にある2人のarraylistsをアダプタのアイテムビューであるrecyclerviewに設定します。だから、それは別のrecyclerviewのカスタムアダプタ内のリサイクルビューです。間違った項目は、だから私は、これら2つのArrayListを持っていた別のrecyclerview

しかし、私は、アプリケーションをデバッグすると、5つの項目を含む最初のarraylistはrecyclerviewで2だけを示しています。第二のarraylistのように。そして、私が2番目のarraylistを削除して再びアプリケーションをデバッグすると、最初のarraylistはその本当の価値を示すでしょう。

そして、私がnotifyDataSetChanged()を呼び出すと、recyclerviewが間違った値を示した後、true値が表示されます。だから、特定のビュー(私はそれがrecyclerview、断片、または何か他のものではない)がまだ適切に読み込まれていないため、私はそれを考えました。

この問題を解決するにはどうすればよいですか?ありがとうございました。

EDIT: これは私のアダプターのコードです:

public class MyAdapter extends RecyclerView.Adapter<AdapterNearMe.MyViewHolder> { 

    private Context context; 
    private List<List<String>> list; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public RecyclerView rView; 

     public MyViewHolder(View view) { 
       super(view); 
       rView = (RecyclerView) view.findViewById(R.id.rview); 
     } 
    } 

    public MyAdapter (Context context, List<List<String>> list) { 
     this.context= context; 
     this.list = list; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_near_me, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     final List<String> newList= list.get(position); 

     holder.rView.setAdapter(new AdapterRView(context,newList)); 
     holder.rView.setLayoutManager(new GridLayoutManager(context,3)); 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 
} 
+3

すでに掲載、オーケーアダプタのコード – Raghunandan

+0

を投稿する必要があります。 –

+1

私は@ Raghunandanは、アダプタのコード全体を投稿するつもりだったと思う:)少なくとも実装されたメソッド。 –

答えて

0

RecyclerView'sbindViewHolderはあなたのセルのプロパティを設定するviewむしろ親RecylerViewためadapterを設定するよりも、あなたの機能を提供します。

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) { 

// This should single Model rather than List 
final List<Model> newList= list.get(position); 

// Instead of creating another recyclerview, check how to create section view 
holder.rView.setAdapter(new AdapterRView(context,newList)); 
holder.rView.setLayoutManager(new GridLayoutManager(context,3)); 
} 
+0

申し訳ありませんが、セクションビューを作成する方法をまだ理解できません。簡単な例を教えてください。私がそれを参照することができるようにリンクかもしれません。 :) –

+0

https://github.com/afollestad/sectioned-recyclerview – Rahul

+0

リストがモデルの中のrecyclerviewに置かれるリストであることを忘れてしまったので、モデルや文字列にすることはできません。 –

0

onCreateViewHolder()メソッド(空のarraylist)でrecyclerviewのアダプターを設定する方法はありますか?それを実際のデータで設定し、onBindViewHolder()でnotifyDataSetChange()を呼び出しますか?

public class MyAdapter extends RecyclerView.Adapter<AdapterNearMe.MyViewHolder> { 

private Context context; 
private List<List<String>> list; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public RecyclerView rView; 

    public MyViewHolder(View view) { 
      super(view); 
      rView = (RecyclerView) view.findViewById(R.id.rview); 
      rView.setLayoutManager(new GridLayoutManager(context,3)); 
    } 
} 

public MyAdapter (Context context, List<List<String>> list) { 
    this.context= context; 
    this.list = list; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
     .inflate(R.layout.item_near_me, parent, false); 

    MyViewHolder holder = new MyViewHolder(itemView); 
    holder.rView.setAdapter(new AdapterRView(context, new ArrayList<String>)); 

    return holder; 

} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) { 
    final List<String> newList = list.get(position); 

    AdapterRView adapter = holder.rView.getAdapter(); 
    if (adapter != null) { 
     adapter.swapList(newList); 
     adapter.notifyDataSetChanged(); 
    } 
} 

@Override 
public int getItemCount() { 
    return list.size(); 
} 
} 

あなたはAdapterRView.classのリストを交換する1つの追加のメソッドを追加する必要があります。

public class AdapterRView.class { 

.... 

private List<String> list; 

    public void swapList(List<String> list) { 
     this.list = list; 
    } 
} 
関連する問題