android - 更改 RecyclerView 中 Item Click 上 TextView 的值?

标签 android android-recyclerview android-adapter

我正在开发一个用于餐厅管理的应用程序,但卡在需要在 RecyclerView 内单击项目时更新 TextView (RecyclerView 外部)的值。

这是我的适配器,考虑在这个适配器之外设置一个 textView,并在点击加号和减号 ImageViews 的项目时设置一个值,如下面的代码所示...

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyHolder> {

ArrayList<MenuItem> MenuDetailList;
Typeface font;

public MyRecyclerAdapter(ArrayList<MenuItem> MenuDetailArray){
    this.MenuDetailList = MenuDetailArray;
}

@Override
public MyRecyclerAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_menu_row_item, null);
    return new MyHolder(v);
}

@Override
public void onBindViewHolder(final MyRecyclerAdapter.MyHolder holder, final int position) {

    holder.txtSubMenuTitle.setText(MenuDetailList.get(position).getTitle());
    holder.txtSubMenuPrice.setText(MenuDetailList.get(position).getPrice());
    holder.txtSubMenuCount.setText(""+MenuDetailList.get(position).getItemCount());
    setCustomTypeface(holder.txtSubMenuTitle, font);
    setCustomTypeface(holder.txtSubMenuPrice,font);

    holder.ImgViewSubMenuMinus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //holder.OrderCount = Integer.parseInt(holder.txtSubMenuCount.getText().toString());
            int ItemCount = MenuDetailList.get(position).getItemCount();
            if (ItemCount > 0) {
                ItemCount = ItemCount - 1;
                holder.txtSubMenuCount.setText("" + ItemCount);
                MenuDetailList.get(position).setItemCount(ItemCount);
                notifyDataSetChanged();
            }
        }
    });

    holder.ImgViewSubMenuPlus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //holder.OrderCount = Integer.parseInt(holder.txtSubMenuCount.getText().toString());

            int ItemCount = MenuDetailList.get(position).getItemCount();
            if (ItemCount < 20) {
                ItemCount = ItemCount + 1;
                holder.txtSubMenuCount.setText("" + ItemCount);
                MenuDetailList.get(position).setItemCount(ItemCount);
                notifyDataSetChanged();
            }
    });
}

@Override
public int getItemCount() {
    return MenuDetailList.size();
}

public static class MyHolder extends RecyclerView.ViewHolder {
    TextView txtSubMenuTitle;
    TextView txtSubMenuPrice;
    ImageView ImgViewSubMenuMinus;
    ImageView ImgViewSubMenuPlus;
    TextView txtSubMenuCount;

    private MyHolder(View row) {
        super(row);
        this.txtSubMenuTitle = (TextView) row.findViewById(R.id.list_txt_sub_menu_title);
        this.txtSubMenuPrice = (TextView) row.findViewById(R.id.list_txt_sub_menu_price);
        this.txtSubMenuCount = (TextView) row.findViewById(R.id.list_txt_sub_menu_count);
        this.ImgViewSubMenuMinus = (ImageView) row.findViewById(R.id.list_img_sub_menu_minus);
        this.ImgViewSubMenuPlus = (ImageView) row.findViewById(R.id.list_img_sub_menu_plus);
    }
}
private void setCustomTypeface(TextView textView, Typeface font) {
    textView.setTypeface(font);
}
}

提前致谢...

最佳答案

接受的答案是 hack。那不是正确的做法。您可以创建一个接口(interface)来将您的点击事件传递给您的 Activity 。

在您的适配器类中创建此接口(interface)。

public interface OnItemClickListener {
  void onItemClick(View view, int position, String tag);
}

然后在类级别的适配器上创建一个实例。

private OnItemClickListener mItemClickListener;

以及设置此监听器的方法。

public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
   this.mItemClickListener = mItemClickListener;
}

现在在您的 Activity 中执行此操作。

AdapterClassName.OnItemClickListener onItemClickListener = new AdapterClassName.OnItemClickListener() {
     @Override
     public void onItemClick(View view, int position, String tag) {

    //Do whatever you want to do on item click in your activity

   }
}
mAdapter.setOnItemClickListener(onItemClickListener);
//mAdapter is your adapter instance

然后最后一件事是在您的 Viewholder 上设置点击监听器。我假设您的查看器仅存在于适配器类中。

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

  public ViewHolder(View itemView) {
    RelativeLayout mainHolder = (RelativeLayout) itemView.findViewById(R.id.main_holder);
    mainHolder.setOnClickListener(this);
  }

   @Override
    public void onClick(View v) {
      if(mItemClickListener != null) {
        mItemClickListener.onItemClick(itemView, getAdapterPosition(), itemView.getText().toString());
      }
    }


}

关于android - 更改 RecyclerView 中 Item Click 上 TextView 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244257/

相关文章:

android - ScaleAnimation 上的 pivotX 和 PivotY 无效

android recyclerview 项目点击次数

android - Android 适配器是异步的吗?

android - 如何使用java将所选项目(我的recyclerview中的多个项目)值从适配器传递到android中的 fragment

android - RecyclerView 在错误的位置设置图像

java - 未经授权获取 field 详细信息(Foursquare)

安卓工作室 : Error Expected Resources as string when using R. color.colorX

android - 接听电话

android - 如何在切换到另一个选项卡之前更新选项卡布局

android - recyclerview 上方的 fragment 未显示