在Recycler Adapter

时间:2015-11-14 10:52:24

标签: android adapter android-recyclerview

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

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

我会让它变得简单。我正在尝试在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" ****/ 
     }
} 

我的问题是,

Q1。调用getViewType的时间和位置以及&#34; 位置&#34;变量以及我们需要返回什么

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

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

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

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

1 个答案:

答案 0 :(得分: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*/
} 

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

<强> Q2)   getItemCount()方法应该返回列表项的数量。

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

<强> 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); 
         ... 
     } 
}