RecyclerAdapater getItemCount崩溃

时间:2018-10-27 04:25:00

标签: java android

我遇到以下问题,不幸的是我的应用程序在进行下一个活动时停止。这是罪魁祸首:

   public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerHolder> {

        ArrayList<Theme> themes;
        private LayoutInflater mInflater;

       public RecyclerAdapter(Context context, ArrayList<Theme> themes) {
            mInflater = LayoutInflater.from(context);
            this.themes = themes;
       }

        public class RecyclerHolder extends RecyclerView.ViewHolder {

            ImageView imageView;
            TextView name,price;

            public RecyclerHolder(View view) {
                super(view);
                imageView = (ImageView)view.findViewById(R.id.demo);
                name = (TextView)view.findViewById(R.id.name);
                price = (TextView)view.findViewById(R.id.price);
            }
        }

        @NonNull
        @Override
        public RecyclerHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view = mInflater.inflate(R.layout.recycler_list, viewGroup, false);
            return new RecyclerHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull RecyclerHolder viewHolder, int i) {
           Log.i("log", themes.get(i).getName());
           viewHolder.imageView.setImageResource(themes.get(i).getDrawableCover());
           viewHolder.name.setText(themes.get(i).getName());
           viewHolder.price.setText(themes.get(i).getPrice());
        }

        @Override
        public int getItemCount() {
           return themes.size();
        }
    }

问题似乎出在getItemCount()方法上。当我尝试返回themes.size()时,应用程序崩溃了。相反,当我return 0时,什么也不显示。这里似乎是什么问题?我是android新手,所以请正确解释。

3 个答案:

答案 0 :(得分:1)

您想用null方法检查数据是否为getItemCount(),因此可以确保您的应用程序永不崩溃:

@Override
public int getItemCount() {
   return themes != null ? themes.size() : 0;
}

答案 1 :(得分:0)

我发现了问题。这是罪魁祸首viewHolder.price.setText(themes.get(i).getPrice());,我正在调用TextView的setText()方法并传递一个int值,这就是它引发ResourceNotFound异常的原因。我已经通过致电Integer.toString()谢谢大家来解决此问题。

答案 2 :(得分:0)

我认为也许您必须初始化ArrayList。

您可以这样初始化:

    ArrayList<Theme> themes = new ArrayList<Theme>();

我不确定100%。 但是尝试一下。