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)
提前致谢...
接受的答案是一个黑客.这不是正确的方法.您可以创建一个界面,将点击事件传递给您的活动.
在适配器类中创建此接口.
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)
| 归档时间: |
|
| 查看次数: |
8861 次 |
| 最近记录: |