当在Recycler Adapter中调用getItemCount和getItemViewType方法时

Gan*_*esh 13 android adapter android-recyclerview

我在stackoverflow中看到了类似的问题,但他们没有给出我的问题的明确答案.在阅读完整的问题之前,请勿将其标记为重复.我看到了这个链接,也是这个.感谢您花时间阅读本文.

我在源代码下面给出了三个问题,请仔细看看.

我会简单的.我试图在Recycler Adapter中使用两个 ViewHolder,我将在ViewPager中使用TabLayout.两个View Holder都有不同的 Xml和不同的元素(即textview,imageview等......)但是它内部有几个混乱.

我实现了我的RecyclerView适配器类,如下所示

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" ****/ 
     }
} 
Run Code Online (Sandbox Code Playgroud)

我的问题是,

Q1.调用getViewType的时间和位置以及" position "变量中的内容以及我们需要返回的内容

Q2.调用getItemCount的时间和地点以及如何正确返回(因为我使用两个视图持有者,每个视图都有不同的数量)

Q3.我创建了单独的Recyclerview Adapter类,但它给出了一个错误,即RecyclerViewAdapter类与另一个类冲突.(因为我在TabLayout的相同活动中使用它们,我认为错误被抛出,我是否正确?或者有没有办法创建单独的Adapter类)

如果你能解释一下RecyclerViewAdapter的全过程,那就太棒了:)但请澄清我上面的混淆.

欢迎任何类型的帮助,提前谢谢... :)

Col*_*iza 7

Q1) 每次创建自定义视图时,都会在onCreateViewHolder()方法之前调用getViewType()方法.

您需要使用自定义列表项创建一个列表List<CustomItem> list=method_to_return_your_list(),并使用getViewType()getter方法创建每个列表项.

在你的get getItemViewType()中

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

考虑到onCreateViewHolder()方法中的switch case语句,这可以是0或1

Q2) getItemCount()方法应该返回列表项的数量.

public int getItemCount() {
         return list.size();
 }
Run Code Online (Sandbox Code Playgroud)

Q3) 不要为同一个Recyclerview创建另一个recyclerview适配器

我也是模仿的. 而不是创建新的ViewHolders,只需更改视图持有者中的itemView

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