更改项目上TextView的值在RecyclerView中单击?

Wil*_*ian 1 android android-adapter android-recyclerview

我正在开发一个用于餐馆管理的应用程序,但是我需要在RecyclerView内部项目点击时更新textview(在RecyclerView之外)的值.

这是我的适配器,考虑一下这个适配器外的textView,并在项目点击Plus和Minus 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);
}
}
Run Code Online (Sandbox Code Playgroud)

提前致谢...

cry*_*sis 5

接受的答案是一个黑客.这不是正确的方法.您可以创建一个界面,将点击事件传递给您的活动.

在适配器类中创建此接口.

public interface OnItemClickListener {
  void onItemClick(View view, int position, String tag);
}
Run Code Online (Sandbox Code Playgroud)

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

private OnItemClickListener mItemClickListener;
Run Code Online (Sandbox Code Playgroud)

以及设置此侦听器的方法.

public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
   this.mItemClickListener = mItemClickListener;
}
Run Code Online (Sandbox Code Playgroud)

现在在你的活动中这样做.

AdapterClassName.OnItemClickListener onItemClickListener = new StoryListAdapter.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
Run Code Online (Sandbox Code Playgroud)

然后最后一件事就是在你的观察者上设置点击监听器.我假设您的视图仅存在于适配器类中.

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


}
Run Code Online (Sandbox Code Playgroud)