【问题标题】:Get value from clicked item in recycler view从回收站视图中单击的项目中获取价值
【发布时间】:2019-03-05 18:08:06
【问题描述】:

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

当我在其中一个项目上按下心脏时,我想接收来自该特定项目的数据。我不确定如何做到这一点。现在我已经为心脏图标创建了一个监听器,但现在我被卡住了。我想获取包含名称、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


    【解决方案1】:

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

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

    查看文档了解更多信息:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()

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

    【讨论】:

      【解决方案2】:

      创建一个将数据发送到活动的接口 在适配器类中:

      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);
              }
           }
      });
      

      在activity中实现接口:

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

      【讨论】:

        【解决方案3】:

        您需要像这样在 OnCreateViewHolder 方法中的视图上设置点击侦听器,并将数据传递给接口方法,以便您可以更新 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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多