如何访问Recycler视图中的值?

时间:2017-02-02 20:28:38

标签: android

我正在尝试访问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();
    }
}

问题是我不知道如何获取项目的实际字段值,以便我可以将其传递给下一个活动。有没有人知道是否有一种简单的方法可以做到这一点?

2 个答案:

答案 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 itemViewHolderupdate()public void update(Item item) { this.item = item; } 可以:

this.item

现在,您可以在onClick()

中使用{{1}}

答案 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