简体   繁体   English

我们可以从RecyclerView的getItemCount()中获得两种返回类型吗?

[英]Can we get two return types from getItemCount() in RecyclerView?

This is my code. 这是我的代码。 when i say return data1(); 当我说返回data1(); it runs fine but when i try return data1() + data3(); 它运行正常,但当我尝试返回data1()+ data3(); it gives me indexOutofBound Excception and i don't know the reason. 它给了我indexOutofBound例外,我不知道原因。 Can someone help me please to find the reason of this error?? 有人可以帮我找到此错误的原因吗?
This is my MainActivity class code 这是我的MainActivity类代码

 String[] data={"ok","this"};
int []images_id = new int[2];
    for(int i=0; i<2; i++){
        images_id[i] = getResources().getIdentifier("drawable/"+"candy_"+i, null, getPackageName());
    }
    ArrayList ok=new ArrayList();
    for (int y=0;y<data.length;y++)
    {
         ok.add(data[y]);
    }
    recyclerView.setLayoutManager(new LinearLayoutManager(getParent()));
    RecyclerWorkclass recyclerWorkclass=new RecyclerWorkclass(this,data,images_id);
    recyclerView.setAdapter(recyclerWorkclass);

And now this iss my RecyclerView class code 现在这是我的RecyclerView类代码

   ArrayList data1,data3;
Context context;
LayoutInflater inflater;
public RecyclerWorkclass(Context context,String[] dataoftext,int[] data2)
{
    inflater= LayoutInflater.from(context);
    this.context=context;
    data1=new ArrayList();
    data3=new ArrayList();
    for (int y=0;y<data2.length;y++)
    {
        this.data3.add(data2[y]);
    }
    for (int i=0;i<dataoftext.length;i++)
    {
        data1.add(dataoftext[i]);
    }
    Toast.makeText(context,"size is"+data3.size(),Toast.LENGTH_LONG).show();
}
@Override
public MyAdapter onCreateViewHolder(ViewGroup parent, int viewType) {
    View view=inflater.inflate(R.layout.recyclerwork_txt,parent,false);
    MyAdapter myAdapter=new MyAdapter(view);
    Toast.makeText(context,"view is "+viewType,Toast.LENGTH_LONG).show();
    return myAdapter;
}
@Override
public void onBindViewHolder(MyAdapter holder, int position) {
    holder.imageView.setImageResource((Integer) data3.get(position));
    holder.textView.setText((String)data1.get(position));
}
@Override
public int getItemCount() {
    return data1.size();
}
public class MyAdapter extends RecyclerView.ViewHolder {
    TextView textView;
    ImageView imageView;
    public MyAdapter(View itemView) {
        super(itemView);
        textView=itemView.findViewById(R.id.textview_phonecompany);
        imageView=itemView.findViewById(R.id.imageView2);}}
}

this code works fine but when i say 此代码工作正常,但当我说

return data1.size() + data3.size();

it shows index out of bound error. 它显示索引超出范围的错误。 why is that? 这是为什么?

Is because when you put data1.size() + data3.size() in getItemCount() you not relative with your onBindViewHolder() and this is can be call anytime RecyclerView.Adapter Doc . 这是因为当您将data1.size() + data3.size()放入getItemCount()您与onBindViewHolder()并不相关,并且可以在任何时候调用RecyclerView.Adapter Doc

When your adapter call the onBindViewHolder() he throw this exception because this must call getItemCount() method and your two list as not the size declared in getItemCount() . 当您的adapter调用onBindViewHolder()他抛出此异常,因为它必须调用getItemCount()方法,并且您的两个列表不是getItemCount()声明的大小。

Explaination

@Override
public void onBindViewHolder(MyAdapter holder, int position) {
   holder.imageView.setImageResource((Integer) data3.get(position));
   holder.textView.setText((String)data1.get(position));
}

In this the position will more than your list because you double the size. 在这种情况下,该position将比您的列表更多,因为您将尺寸增加了一倍。 So when he try to do data3.get(position) this exception append. 因此,当他尝试执行data3.get(position)将添加此异常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 未调用RecyclerView重写方法,并且getItemCount始终返回0 - RecyclerView Overriden methods not called and getItemCount always return 0 RecyclerView 不调用 getItemCount - RecyclerView not calling getItemCount 如何将 ArrayList 大小从 onBindViewHolder 传递给 RecyclerView 中的 getItemCount() 方法? - How to pass ArrayList size from onBindViewHolder to getItemCount() method in RecyclerView? RecyclerView 里面的 RecyclerView 弄错了 getItemCount() - RecyclerView inside RecyclerView made wrong getItemCount() 是否有任何库我们可以在recyclerview中获得marquee效果(例如hotstar vip页面滚动图像)? - Is there any library from which we can we get marquee effect in recyclerview(e.g hotstar vip page scrolling images)? RecyclerView getChildCount() 和 getItemCount() 返回相同的值 - RecyclerView getChildCount() and getItemCount() returns same value RecyclerView 适配器的 getItemCount 抛出 NullPointerException - RecyclerView adapter's getItemCount throws NullPointerException RecyclerView未被填充(getItemCount()返回零) - RecyclerView not being populated (getItemCount() is returning zero) 在RecyclerView中膨胀两种类型的.XML - Inflate two types of .XML in RecyclerView 常规编程:如何从“get”方法返回两种原语(&#39;int和&#39;string&#39;)? - Conventional Programming: How do you return two Types of primitive ('int and 'string') from “get” method?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM