我有来自服务器的商品列表,我试图在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
函数。
答案 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