2015-11-14 14 views
8

私はstackoverflowで同様の質問を見ましたが、私の質問に明確な答えはありません。私の完全な質問を読む前にそれを公証としてマークしないでください。私はthisリンク、this、およびthisも見ました。 これを読んでいただきありがとうございます。getItemCountメソッドとgetItemViewTypeメソッドがRecyclerアダプタで呼び出されたとき

私はソースコードの下に3つの質問を付けました。親切に見てください。

私はそれを簡単にします。私は2つをViewHolderを私はで使用しようとしているRecyclerアダプタで使用しようとしています。TabLayoutのためのViewPager。両方のビューホルダー異なるxmlと異なる要素(すなわちtextview、imageviewなど..)しかし、それの中にいくつかの混乱を打たれた。

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 


    public class MainViewHolder extends RecyclerView.ViewHolder { 
     public MainViewHolder(View v) { 
     super(v); 
     } 


    class ViewHolder0 extends MainViewHolder { 
     ... 
    } 

    class ViewHolder2 extends MainViewHolder { 
     ... 
    } 

    @Override 
    public int getItemViewType(int position) { 
     /**** I don't know where and when this method will be called and what will be the value present in the variable "position" ****/ 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     switch (viewType) { 
      case 0: return new ViewHolder0(...); 
      case 2: return new ViewHolder2(...); 
      ... 
     } 
    } 
     public int getItemCount() { 
      /**** I don't know where and when this method will be called and what will be the value present in the variable "position" ****/ 
    } 
} 

を次のように私は私のRecyclerViewアダプタクラスを実装し、私の質問は、

Q1ます。いつどこでgetViewTypeが呼び出され、 "ポジション"に何があり、何を返す必要がありますか?返す必要があるもの:

Q2。いつ、どこgetItemCountが呼び出され、どのように私は正しく(私は2つのビューの所有者を使用していますが、それぞれが異なる数を持っていますので)

Q3を返すことができます。私は別のRecyclerview Adapterクラスを作成しましたが、RecyclerViewAdapterクラスが別のものと衝突するエラーが発生しました。 (私はTabLayoutと同じアクティビティでそれらを使用しているので、エラーがスローされたと思いましたか、それとも別のアダプタクラスを作成する方法がありますか)

RecyclerViewAdapterの完全なプロセスを説明できれば素晴らしいです:)しかし、上記の混乱を明確にしてください。

ヘルプの任意のタイプ、事前に感謝を歓迎... :)

+0

のようなビューホルダーでitemViewを変更 'getItemCount'は、あなたの' RecyclerView'内の項目の合計数を返し、 'getViewType'は、[値で呼び出され0..' cnt'-1] 'getItemCount'によって' cnt'が返されます – pskink

+0

@pskink同じアダプタで2つ以上のホルダを使用する場合、各ホルダは、OnCreateとOnBindで別々のカウント操作と分離操作を行います。コードですか? – Ganesh

+1

これらのメソッドの中に 'Log.d'をいくつか追加すると、それは学習の最善の方法です。 – pskink

答えて

5

Q1) はgetViewType()メソッドは、onCreateViewHolder()メソッドの前にカスタムビューが作成されるたびに呼び出されます。

カスタムリストアイテムList<CustomItem> list=method_to_return_your_list()を持つリストを作成し、それぞれにgetViewType()ゲッターメソッドを使用してリストを作成する必要があります。あなたのGET getItemViewTypeで

()

public int getItemViewType(int position) { 
    return list.get(position).getViewType(); 
    /*this returns the view type of each element in the list*/ 
} 

これは方法

Q2)onCreateViewHolder(であなたのスイッチケースの文を考慮0または1のいずれかになります) getItemCount()メソッドはリストアイテムの数を返すべきです。

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

Q3) また、私はfogot同じrecyclerview

のための別のrecyclerviewアダプタを作成しないでください。 代わりに新しいViewHoldersを作成するのではなく、単に

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    switch (viewType) { 
     case 0: return new ViewHolder(itemView0); 
     case 2: return new ViewHolder(itemView1); 
     ... 
    } 
} 
+0

あなたの答えをありがとう、getItemViewType()について詳しく説明できますか?1.このgetItemViewTypeは、整数引数を使用して呼び出される対象となります。私は何が "ポジション"にあるのかを意味します。各ViewHoldersのたびに呼び出されるのか、それともOnBindメソッドが呼び出されるのでしょうか?それの目的は何ですか? – Ganesh

+0

これは、データリストのタイプであるCustomItemクラス内のゲッターメソッドです。List list; CustomItem item = new CustomItem(); item.setViewType = 0; list.add(item);などのリスト要素を作成するときに設定する必要があります。 –

関連する問題