从回收站视图中的已点击项获取价值

问题描述 投票:0回答:3

我有一个项目清单。这些数据从API接收,然后通过循环视图列出。这就是它现在的样子:https://imgur.com/a/h4mYXD6

当我在其中一个项目上按下心脏时,我想要从该特定项目接收数据。我不知道怎么做。现在我已经创建了一个心脏图标的监听器,但现在我卡住了。我想获取包含name,pictureURL和到期日期的数据。

我有一个适配器,我将数据与视图绑定。这是onCreateViewHolder:

@Override
public FoodViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //inflating and returning our view holder
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    View view = inflater.inflate(R.layout.layout_food, parent, false);
    return new FoodViewHolder(view);
}

这是我的OnBindViewHolder方法:

@Override
public void onBindViewHolder(FoodViewHolder holder, int position) {
    //getting the product of the specified position
    Food food = foodList.get(position);

    holder.heart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v){
            switch (v.getId()) {
                case R.id.heart:
//what code do i write here???
break;
            }
        }
    });

这是正确的方法吗?我从哪里开始?

android android-recyclerview android-viewholder
3个回答
0
投票

要在侦听器中获取项目,可以使用ViewHolder的getAdapterPosition

Food clickedFood = foodList.get(holder.getAdapterPosition());

有关更多信息,请参阅文档:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()

然后,您可以访问clickedFood的字段和方法以获取特定的数据饼。


0
投票

创建一个接口以将数据发送到活动在Adapter类中:

private FoodListener foodListener;

public void setClickItemListener(FoodListener foodListener) {
    this.foodListener= foodListener;
}
public interface FoodListener {
    void onHeartClick(Food food);
}


@Override
public void onBindViewHolder(FoodViewHolder holder, int position) {
      //getting the product of the specified position
      final Food food = foodList.get(position);

      holder.heart.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v){
        switch (v.getId()) {
            case R.id.heart:
                foodListener.onHeartClick(food);
        }
     }
});

在活动中实现接口:

public class MainActivity implements Adapter.FoodListener {
    @Override
    onCreate(...) {
          .....
          recyclerViewAdapter.setListener(this);
    }
    @Override
    void onHeartClick(Food food) {
         //Get food here
    }
}

0
投票

您需要在OnCreateViewHolder方法中的视图上设置click侦听器,并将数据传递给interface方法,以便更新Activity。希望这可以帮助。

 @Override
public FoodViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //inflating and returning our view holder
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View view = inflater.inflate(R.layout.layout_food, parent, false);
     FoodViewHolder holder = new FoodViewHolder(view);
    holder.heartView.setOnClickListener { v-> 
              Food food = list.get(holder.getAdapterPosition());
        foodListener.OnClick(food);
    }
    return holder;
}
© www.soinside.com 2019 - 2024. All rights reserved.