我正在尝试访问RecyclerView
内的值并将其传递给另一个项目。我有一个onClick()
方法,在点击项目时调用该方法,我可以使用getPosition()
方法获得它的位置。
private List<BucketItem> mItemList;
private Context mContext;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
public CheckedTextView nameCheckedTextView;
public TextView descriptionBox, date, latitude, longitude;
public ViewHolder(View itemView)
{
super(itemView);
itemView.setOnClickListener(this);
nameCheckedTextView = (CheckedTextView) itemView.findViewById(R.id.checkedTextView);
descriptionBox = (TextView) itemView.findViewById(R.id.itemDescription);
date = (TextView) itemView.findViewById(R.id.itemDate);
latitude = (TextView) itemView.findViewById(R.id.itemLatitude);
longitude = (TextView) itemView.findViewById(R.id.itemLongitude);
}
@Override
public void onClick(View view)
{
Intent intent = new Intent(this, EditItem.class);
Toast.makeText(view.getContext(), "position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}
问题是我不知道如何获取项目的实际字段值,以便我可以将其传递给下一个活动。有没有人知道是否有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
您可以访问该&#34;项目&#34;在onBindViewHolder()
内(在recyclerView适配器中):
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.update(items.get(position));
}
并在ViewHolder中:
public void update(Item item) {
// here you can use "item"
}
编辑:private Item item
内ViewHolder
,update()
内public void update(Item item) {
this.item = item;
}
可以:
this.item
现在,您可以在onClick()
答案 1 :(得分:0)
在onBindViewHolder中如果您将某些数据作为最终字符串或最终整数,然后使用这些韵母创建一个onClickListener,那么每次调用新的onClickListerner时,都会调用它们内的韵母。
这是我应用的简化版本:
public void onBindViewHolder(FR_Adapter.ViewHolder holder, final int positionCard) {
//this is where you call the db and fill the card with data,
CardView cardView = holder.cardView;
TextView textView = (TextView) cardView.findViewById(R.id.question);
final String stringInTextView = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
textView.setText(stringInTextView); // this example should only show the time when the card was created
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reactToClick(positionCard,stringInTextView,true);
}
});
}
private void reactToClick(int positionCard,String stringInTextView, boolean wasClick) {
Log.v("custom Log.v call","click at position " + positionCard + "text in card was" + stringInTextView);
}
(基本上如果你有20张牌,那么20个onClickListener中的每一个都会记住你第一次显示卡片时保存的字符串+ int positionCard)
//to add more vars just 1create them as final, 2add them in the method call, 3modify the method to have more arguments:
final String newVariable = MainActivity.getAppStartTime() // << 1add this
reactToClick(positionCard,stringInTextView,true,newVariable); // << 2edit this
reactToClick(int positionCard,String stringInTextView, boolean wasClick, String newVariable) // << 3edit this