RecyclerView适配器OnClick未调用

时间:2018-02-22 17:35:53

标签: android android-recyclerview onclicklistener recycler-adapter

我有来自服务器的商品列表,我试图在RecyclerView中对其进行充气。但是,在点击这些项目时,即使我已在View.onClickListener课程中实施MyViewHolder,也不会发生任何事情。

这是我的适配器代码。

class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
    ArrayList<User> list;
    Context context;
    UserAdapter(ArrayList<User>list,Context context) {
        Log.e("Listsizeis","" +list.size());
        this.list = list;
        this.context = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.e("InsideOnCreate","Yes");
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.user_list_row, parent, false);

        return new MyViewHolder(itemView,context,list,this);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Log.e("InsideOnBind","Yes");
        User u = list.get(position);
        holder.title.setText(u.getName());
    }

    @Override
    public int getItemCount() {
        if(list.size() ==0) return 1;
        else return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView title;
        private UserAdapter adapter;
        ArrayList<User> userArrayList;
        Context context;

        public MyViewHolder(View view,Context context,ArrayList<User> userArrayList,UserAdapter adapter) {
            super(view);
            Log.e("OnMyviewHolder","yes" + userArrayList.size());
            this.userArrayList = userArrayList;
            this.context = context;
            title = view.findViewById(R.id.title);
            this.adapter = adapter;
        }

        @Override
        public void onClick(View view) {
            Log.e("OnMyviewHolderItem","yes" + userArrayList.size());
            Toast.makeText(context, "Item Clicked", Toast.LENGTH_SHORT).show();
        }
    }
}
单击该项目时未调用

onClick函数。

1 个答案:

答案 0 :(得分:2)

我真的不明白将适配器本身传递到class Noble { public: Noble(string name) : name(name), alive(true) {} bool hire(Warrior& war) { } bool fire(Warrior& war) { } bool battle(Noble& enemy) { } void display(ostream& os = cout) const { } } // <-- out of place? private: vector<Warrior*> army; string name; double strength; bool alive; void lost() { } void won(double damage) { } }; 的重点是什么。无论如何,我想建议您的ViewHolder中的以下更改应该有效。

ViewHolder

现在,在public class MyViewHolder extends RecyclerView.ViewHolder { public TextView title; ArrayList<User> userArrayList; Context context; public MyViewHolder(View itemView, Context context, ArrayList<User> userArrayList) { super(view); Log.e("OnMyviewHolder","yes" + userArrayList.size()); this.userArrayList = userArrayList; this.context = context; title = view.findViewById(R.id.title); } public void bindView(final int pos) { title.setText(userArrayList.get(pos).getName()); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, userArrayList.get(pos) + "", Toast.LENGTH_SHORT).show(); } }); } } 功能中,您需要在初始化BindViewHolder后调用bindView功能。

ViewHolder
相关问题