View.getId() 不工作
View.getId() not working
我是 android 编程新手。我想更新 recyclerview 的卡片视图布局中的项目。这是 recyclerview
的 ListRowViewHolder
public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder
{
protected NetworkImageView thumbnail;
protected TextView itemname;
protected TextView price;
protected TextView itemtype;
protected TextView quantity;
protected ImageView add;
protected ImageView sub;
protected ImageView imageView;
protected CardView item_layout;
public ListMenuRowViewHolder(View itemView) {
super(itemView);
this.thumbnail=(NetworkImageView)itemView.findViewById(R.id.recom);
this.imageView=(ImageView)itemView.findViewById(R.id.categ);
this.itemname=(TextView)itemView.findViewById(R.id.itemvalue);
this.add=(ImageView)itemView.findViewById(R.id.add);
this.sub=(ImageView)itemView.findViewById(R.id.sub);
this.price=(TextView)itemView.findViewById((R.id.price));
this.quantity=(TextView)itemView.findViewById((R.id.quantity));
this.item_layout=(CardView)itemView.findViewById((R.id.item_layout));
itemView.setClickable(true);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("myname", "rohit");
ItemscardClickListener.onClick(v, getAdapterPosition());
}
});
}
}
这是我尝试更新数量的地方
mAdapter.setItemsCardClickListener(new ItemsCardClickListener() {
@Override
public void onClick(View v, int position) {
int q;
switch (v.getId())
{
case R.id.add : q= Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
q++;
Log.e("mishra", String.valueOf(q));
mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
mAdapter.notifyDataSetChanged();
break;
case R.id.sub : q=Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
if(q>0)
q--;
mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
mAdapter.notifyDataSetChanged();
break;
case R.id.quantity:
Log.e("mishra", "hihi");
break;
default:Log.e("mishra", "hi");
}
}
});
每次当我点击视图中的一个项目时,它们都会被点击,但我没有使用 v.getId() 获取 ID。交换机始终进入默认情况。请提供一些解决方案。
您在包含所有其他子视图的 View
上设置 OnClickListener
,而不是在各个子视图本身上设置。您应该让 ListMenuRowViewHolder
实现 View.OnClickListener
并在每个单独的视图上设置一个侦听器,如下所示:
sub.setOnClickListener(this);
price.setOnClickListener(this);
//etc
你可以实施
@Override
public void onClick(View v) {
//Now the correct subview gets passed to your switch in the Activity
ItemscardClickListener.onClick(v, getAdapterPosition());
}
在 ListMenuRowViewHolder
.
所以它看起来像这样:
public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected NetworkImageView thumbnail;
protected TextView itemname;
protected TextView price;
protected TextView itemtype;
protected TextView quantity;
protected ImageView add;
protected ImageView sub;
protected ImageView imageView;
protected CardView item_layout;
public ListMenuRowViewHolder(View itemView) {
super(itemView);
this.thumbnail = (NetworkImageView) itemView.findViewById(R.id.recom);
this.imageView = (ImageView) itemView.findViewById(R.id.categ);
this.itemname = (TextView) itemView.findViewById(R.id.itemvalue);
this.add = (ImageView) itemView.findViewById(R.id.add);
this.sub = (ImageView) itemView.findViewById(R.id.sub);
this.price = (TextView) itemView.findViewById(R.id.price);
this.quantity = (TextView) itemView.findViewById(R.id.quantity);
this.add.setOnClickListener(this);
this.sub.setOnClickListener(this);
//Do this for each view
}
@Override
public void onClick(View v) {
Log.e("myname", "rohit");
ItemscardClickListener.onClick(v, getAdapterPosition());
}
}
您正在设置容器 (itemView) 的点击侦听器。您需要在您的个人视图上设置点击侦听器:
this.add.setOnClickListener(mListener);
this.sub.setOnClickListener(mListener);
this.price.setOnClickListener(mListener);
this.quantity.setOnClickListener(mListener);
然后声明一个监听器:
View.OnClickListener mListener = new View.OnClickListener() {
public void onClick(View view) {
switch (view.getId()) {
case R.id.add:
break;
case R.id.sub:
break;
// add others
}
}
}
我是 android 编程新手。我想更新 recyclerview 的卡片视图布局中的项目。这是 recyclerview
的 ListRowViewHolderpublic static class ListMenuRowViewHolder extends RecyclerView.ViewHolder
{
protected NetworkImageView thumbnail;
protected TextView itemname;
protected TextView price;
protected TextView itemtype;
protected TextView quantity;
protected ImageView add;
protected ImageView sub;
protected ImageView imageView;
protected CardView item_layout;
public ListMenuRowViewHolder(View itemView) {
super(itemView);
this.thumbnail=(NetworkImageView)itemView.findViewById(R.id.recom);
this.imageView=(ImageView)itemView.findViewById(R.id.categ);
this.itemname=(TextView)itemView.findViewById(R.id.itemvalue);
this.add=(ImageView)itemView.findViewById(R.id.add);
this.sub=(ImageView)itemView.findViewById(R.id.sub);
this.price=(TextView)itemView.findViewById((R.id.price));
this.quantity=(TextView)itemView.findViewById((R.id.quantity));
this.item_layout=(CardView)itemView.findViewById((R.id.item_layout));
itemView.setClickable(true);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("myname", "rohit");
ItemscardClickListener.onClick(v, getAdapterPosition());
}
});
}
}
这是我尝试更新数量的地方
mAdapter.setItemsCardClickListener(new ItemsCardClickListener() {
@Override
public void onClick(View v, int position) {
int q;
switch (v.getId())
{
case R.id.add : q= Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
q++;
Log.e("mishra", String.valueOf(q));
mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
mAdapter.notifyDataSetChanged();
break;
case R.id.sub : q=Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity());
if(q>0)
q--;
mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q));
mAdapter.notifyDataSetChanged();
break;
case R.id.quantity:
Log.e("mishra", "hihi");
break;
default:Log.e("mishra", "hi");
}
}
});
每次当我点击视图中的一个项目时,它们都会被点击,但我没有使用 v.getId() 获取 ID。交换机始终进入默认情况。请提供一些解决方案。
您在包含所有其他子视图的 View
上设置 OnClickListener
,而不是在各个子视图本身上设置。您应该让 ListMenuRowViewHolder
实现 View.OnClickListener
并在每个单独的视图上设置一个侦听器,如下所示:
sub.setOnClickListener(this);
price.setOnClickListener(this);
//etc
你可以实施
@Override
public void onClick(View v) {
//Now the correct subview gets passed to your switch in the Activity
ItemscardClickListener.onClick(v, getAdapterPosition());
}
在 ListMenuRowViewHolder
.
所以它看起来像这样:
public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected NetworkImageView thumbnail;
protected TextView itemname;
protected TextView price;
protected TextView itemtype;
protected TextView quantity;
protected ImageView add;
protected ImageView sub;
protected ImageView imageView;
protected CardView item_layout;
public ListMenuRowViewHolder(View itemView) {
super(itemView);
this.thumbnail = (NetworkImageView) itemView.findViewById(R.id.recom);
this.imageView = (ImageView) itemView.findViewById(R.id.categ);
this.itemname = (TextView) itemView.findViewById(R.id.itemvalue);
this.add = (ImageView) itemView.findViewById(R.id.add);
this.sub = (ImageView) itemView.findViewById(R.id.sub);
this.price = (TextView) itemView.findViewById(R.id.price);
this.quantity = (TextView) itemView.findViewById(R.id.quantity);
this.add.setOnClickListener(this);
this.sub.setOnClickListener(this);
//Do this for each view
}
@Override
public void onClick(View v) {
Log.e("myname", "rohit");
ItemscardClickListener.onClick(v, getAdapterPosition());
}
}
您正在设置容器 (itemView) 的点击侦听器。您需要在您的个人视图上设置点击侦听器:
this.add.setOnClickListener(mListener);
this.sub.setOnClickListener(mListener);
this.price.setOnClickListener(mListener);
this.quantity.setOnClickListener(mListener);
然后声明一个监听器:
View.OnClickListener mListener = new View.OnClickListener() {
public void onClick(View view) {
switch (view.getId()) {
case R.id.add:
break;
case R.id.sub:
break;
// add others
}
}
}