我正在开发一个用于餐厅管理的应用程序,但卡在需要在 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/