簡體   English   中英

我們可以從RecyclerView的getItemCount()中獲得兩種返回類型嗎?

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

這是我的代碼。 當我說返回data1(); 它運行正常,但當我嘗試返回data1()+ data3(); 它給了我indexOutofBound例外,我不知道原因。 有人可以幫我找到此錯誤的原因嗎?
這是我的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);

現在這是我的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);}}
}

此代碼工作正常,但當我說

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

它顯示索引超出范圍的錯誤。 這是為什么?

這是因為當您將data1.size() + data3.size()放入getItemCount()您與onBindViewHolder()並不相關,並且可以在任何時候調用RecyclerView.Adapter Doc

當您的adapter調用onBindViewHolder()他拋出此異常,因為它必須調用getItemCount()方法,並且您的兩個列表不是getItemCount()聲明的大小。

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

在這種情況下,該position將比您的列表更多,因為您將尺寸增加了一倍。 因此,當他嘗試執行data3.get(position)將添加此異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM