我试图为String
中的每个项目使用不同的RecyclerView
,但我的计划始终采用第一个String
我放入ArrayList
,无论我点击哪个项目:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
final View v = LayoutInflater.from(mContext).inflate(R.layout.cardview, null);
final ContentMain contentMain = mData.get(viewType);
v.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(v.getContext(), contentMain.getMyContent(),
Toast.LENGTH_LONG).show();
}
}
ViewHolder vHolder = new ViewHolder(v);
return vHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ContentMain contentMain = mData.get(position);
holder.myContent= mData.get(position).getMyContent();
}
答案 0 :(得分:0)
您不应该绑定onClickListener
中的onCreateViewHolder
。 onCreateViewHolder
的目的是构造ViewHolder而不是绑定信息。
关注onCreateViewHolder
中的代码:
final ContentMain contentMain = mData.get(viewType);
将始终返回第一个元素,因为您的viewType为0
。它没有描述这个位置。
将此代码移至onBindViewHolder
,如下所示:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ContentMain contentMain = mData.get(position);
holder.myContent= mData.get(position).getMyContent();
holder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(v.getContext(), contentMain.getMyContent(),Toast.LENGTH_LONG).show();
}
});
}
答案 1 :(得分:0)
在onClick()
中获取数据。
您在创建position
时使用ViewHolder
获取数据。它会给出错误的position
,因为recyclerview
必须计算布局测量 -
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
final View v = LayoutInflater.from(mContext).inflate(R.layout.cardview, parent, false); //Avoid inflate layout with null parent
v.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final ContentMain contentMain = mData.get(getAdapterPosition());
Toast.makeText(v.getContext(), contentMain.getMyContent(), Toast.LENGTH_LONG).show();
}
}
ViewHolder vHolder = new ViewHolder(v);
return vHolder;
}
修改强>
您可能应该在ViewHolder
-
public static ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View v) {
v.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do you stuffs here...
}
}
}
}