我有一个回收站视图,我想吐司单击的项目的ID。取而代之的是,每次我敬酒时,我都会得到第一件东西,而无论我敬酒的是什么。
无论我是烘烤奎宁,布芬还是其他任何食物,它都可以扑热息痛。
这是我的代码:
public class DrugsAdapter extends RecyclerView.Adapter<DrugsAdapter.ViewHolder> {
private List<DrugModel> drugList;
private Context mContext;
private RecyclerView mRecyclerV;
DrugModel drugModel;
public class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView drugName,drugMode;
public View layout;
public ViewHolder(View v) {
super(v);
layout = v;
drugName = (TextView) v.findViewById(R.id.drugName);
drugMode = v.findViewById(R.id.drugModeOfAction);
drugName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
public void add(int position, DrugModel drug) {
drugList.add(position, drug);
notifyItemInserted(position);
}
public void remove(int position) {
drugList.remove(position);
notifyItemRemoved(position);
}
// Provide a suitable constructor (depends on the kind of dataset)
public DrugsAdapter(List<DrugModel> myDataset, Context context, RecyclerView recyclerView) {
drugList = myDataset;
mContext = context;
mRecyclerV = recyclerView;
}
// Create new views (invoked by the layout manager)
@Override
public DrugsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
// drugModel = new DrugModel();
// drugModel = drugList.get(viewType);
// create a new view
LayoutInflater inflater = LayoutInflater.from(
parent.getContext());
View v =
inflater.inflate(R.layout.drug_item, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = drugModel.getDrugId();
Toast.makeText(mContext,"id "+a,Toast.LENGTH_LONG).show();
}
});
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final DrugModel drug = drugList.get(position);
holder.drugName.setText(drug.getdrugName());
holder.drugMode.setText(drug.getMode());
}
@Override
public int getItemCount() {
return drugList.size();
}
}
我打算将烘烤的参数项作为意图传递给下一个活动,但这现在是一个问题。
答案 0 :(得分:1)
替换您的OnClick侦听器,以便它通过使用getAdapterPosition()
正确使用当前绑定的项目:
final ViewHolder vh = new ViewHolder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = drugList.get(vh.getAdapterPosition()).getDrugId();
Toast.makeText(mContext,"id "+a,Toast.LENGTH_LONG).show();
}
});
答案 1 :(得分:1)
将此代码放入onBindViewHolder()
holder.parentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = drug.getDrugId();
Toast.makeText(mContext,"id "+a,Toast.LENGTH_LONG).show();
}
});
然后在ViewHolder类中声明该项目的父视图,并在父视图上实现onClickListener。
希望这会有所帮助。
答案 2 :(得分:1)
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, ""+drugList.get(getAdapterPosition()).getId(),
Toast.LENGTH_SHORT).show();
}
});
答案 3 :(得分:1)
从此onCreateViewHolder方法中删除以下代码:
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = drugModel.getDrugId();
Toast.makeText(mContext,"id "+a,Toast.LENGTH_LONG).show();
}
});
并在onBindViewHolder方法中添加以下代码:
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a = drug.getDrugId();
Toast.makeText(mContext,"id "+a,Toast.LENGTH_LONG).show();
}
});
答案 4 :(得分:1)
使用以下代码,它将与您的代码配合使用。
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final DrugModel drug = drugList.get(position);
holder.drugName.setText(drug.getdrugName());
holder.drugMode.setText(drug.getMode());
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext,"id "+drug.getId(),Toast.LENGTH_LONG).show();
}
});
}
答案 5 :(得分:1)
要提供实现onClickListener的正确方法,可以看一下: @nahaarman回复或this其他方法。
从这些链接中,您可以看到通过了position
以提供来自recyclerview的正确元素。
我从您的代码中看到的是,您只设置了第一个DrugId drugModel.getDrugId()
,就像其他人所说的那样,您需要将代码从onCreateViewHolder移到onBindViewHolder。