问题描述
我用一个列表视图,有一个名为列表项订单按钮。我想显示嘀的形象,当用户presses按钮,隐藏在用户$ P $再次psses按钮。
我的问题是,当我在按钮上点击了第一项,选中第4,8项的形象也出现了。
这是onClickListener在适配器,
viewHolderItem.btnOrder.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
布尔isSelected = shoe.isSelected(); 如果(isSelected){
viewHolderItem.ivTick.setImageDrawable(NULL);
isSelected = FALSE;
}其他{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources()getDrawable(R.drawable.tick));
isSelected = TRUE;
} shoeList.get(位置).setSelected(isSelected);
obj.getAdapter()notifyDataSetChanged()。
}
});
什么是这个问题的原因是什么?
更新:这是我adapte getview方法
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){ 最后ViewHolderItem viewHolderItem; 如果(convertView == NULL){
LayoutInflater吹气=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.component_order_shoe_row,NULL); viewHolderItem =新ViewHolderItem(); viewHolderItem.tvName =(TextView中)convertView.findViewById(R.id.tv_component_order_shoe_name);
viewHolderItem.tvPrice =(TextView中)convertView.findViewById(R.id.tv_component_order_shoe_price);
viewHolderItem.tvDesc =(TextView中)convertView.findViewById(R.id.tv_component_order_shoe_description);
viewHolderItem.ivPic =(ImageView的)convertView.findViewById(R.id.iv_component_order_shoe_pic);
viewHolderItem.ivTick =(ImageView的)convertView.findViewById(R.id.iv_component_order_shoe_tick);
viewHolderItem.spinnerSize =(微调)convertView.findViewById(R.id.spinner_component_order_shoe_size);
viewHolderItem.etQty =(EditText上)convertView.findViewById(R.id.et_component_order_shoe_qty);
viewHolderItem.btnOrder =(按钮)convertView.findViewById(R.id.btn_component_order_shoe_order); convertView.setTag(viewHolderItem); }其他{
viewHolderItem =(ViewHolderItem)convertView.getTag();
} 最后擦鞋鞋= shoeList.get(位置);
viewHolderItem.tvName.setText(shoe.getShoeName()); 字符串文本=将String.valueOf(shoe.getPrice());
INT integerPlaces = text.indexOf('。');
INT小数位数= text.length() - integerPlaces - 1;
如果(小数位数== 1){
viewHolderItem.tvPrice.setText(RS+文字+0);
}其他{
viewHolderItem.tvPrice.setText(RS+文字);
}
viewHolderItem.tvDesc.setText(shoe.getDesc()); BMP位图= AppControl.convertStringToBitmap(shoe.getImg());
viewHolderItem.ivPic.setImageBitmap(BMP); 诠释最小= shoe.getSmallestSize();
诠释最大= shoe.getLargestSize(); 整数[] = ARR getSizeArray(最小,最大);
ArrayAdapter<整数GT;适配器=新ArrayAdapter<整数GT;(mContext,android.R.layout.simple_spinner_dropdown_item,ARR);
viewHolderItem.spinnerSize.setAdapter(适配器);
viewHolderItem.btnOrder.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
布尔isSelected = shoe.isSelected(); 如果(isSelected){
viewHolderItem.ivTick.setImageDrawable(NULL);
isSelected = FALSE;
}其他{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources()getDrawable(R.drawable.tick));
isSelected = TRUE;
} shoeList.get(位置).setSelected(isSelected);
obj.getAdapter()notifyDataSetChanged()。
}
}); 返回convertView;
}
您必须设置标记时首次所以创建的视图:
如果(convertView == NULL){
LayoutInflater吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // code viewHolderItem.btnOrder =(的ImageButton)rowView.findViewById(R.id.imageButton); viewHolderItem.btnOrder.setTag(viewHolder); //设置标签的按钮
convertView.setTag(viewHolder);
}其他{
viewHolderItem =(ViewHolder)convertView.getTag();
}
和获得它的点击监听器里:
viewHolderItem.btnOrder.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
viewHolderItem =(ViewHolder)v.getTag(); //获取标签内的点击
布尔isSelected = shoe.isSelected(); 如果(isSelected){
viewHolderItem.ivTick.setImageDrawable(NULL);
isSelected = FALSE;
}其他{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources()getDrawable(R.drawable.tick));
isSelected = TRUE;
} shoeList.get(位置).setSelected(isSelected);
obj.getAdapter()notifyDataSetChanged()。
}
});
I'm using a list view and there is a button called "Order" in the list item. I want to show a "tick" image when the user presses the button and hide it when the user presses the button again.
My issue is when I clicked on the button on the first item, tick image of the 4th and 8th item is also appeared.
This is the onClickListener in the adapter,
viewHolderItem.btnOrder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean isSelected = shoe.isSelected();
if(isSelected){
viewHolderItem.ivTick.setImageDrawable(null);
isSelected = false;
}else{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources().getDrawable(R.drawable.tick));
isSelected = true;
}
shoeList.get(position).setSelected(isSelected);
obj.getAdapter().notifyDataSetChanged();
}
});
What is the reason for this issue?
update: This is my adapte getview method
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolderItem viewHolderItem;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.component_order_shoe_row,null);
viewHolderItem = new ViewHolderItem();
viewHolderItem.tvName = (TextView)convertView.findViewById(R.id.tv_component_order_shoe_name);
viewHolderItem.tvPrice = (TextView)convertView.findViewById(R.id.tv_component_order_shoe_price);
viewHolderItem.tvDesc = (TextView)convertView.findViewById(R.id.tv_component_order_shoe_description);
viewHolderItem.ivPic = (ImageView)convertView.findViewById(R.id.iv_component_order_shoe_pic);
viewHolderItem.ivTick = (ImageView)convertView.findViewById(R.id.iv_component_order_shoe_tick);
viewHolderItem.spinnerSize = (Spinner)convertView.findViewById(R.id.spinner_component_order_shoe_size);
viewHolderItem.etQty = (EditText)convertView.findViewById(R.id.et_component_order_shoe_qty);
viewHolderItem.btnOrder = (Button)convertView.findViewById(R.id.btn_component_order_shoe_order);
convertView.setTag(viewHolderItem);
}else{
viewHolderItem = (ViewHolderItem)convertView.getTag();
}
final Shoe shoe = shoeList.get(position);
viewHolderItem.tvName.setText(shoe.getShoeName());
String text = String.valueOf(shoe.getPrice());
int integerPlaces = text.indexOf('.');
int decimalPlaces = text.length() - integerPlaces - 1;
if(decimalPlaces==1){
viewHolderItem.tvPrice.setText("Rs."+ text + "0");
}else{
viewHolderItem.tvPrice.setText("Rs."+ text);
}
viewHolderItem.tvDesc.setText(shoe.getDesc());
Bitmap bmp = AppControl.convertStringToBitmap(shoe.getImg());
viewHolderItem.ivPic.setImageBitmap(bmp);
int smallest = shoe.getSmallestSize();
int largest = shoe.getLargestSize();
Integer[] arr = getSizeArray(smallest,largest);
ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(mContext, android.R.layout.simple_spinner_dropdown_item,arr);
viewHolderItem.spinnerSize.setAdapter(adapter);
viewHolderItem.btnOrder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean isSelected = shoe.isSelected();
if(isSelected){
viewHolderItem.ivTick.setImageDrawable(null);
isSelected = false;
}else{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources().getDrawable(R.drawable.tick));
isSelected = true;
}
shoeList.get(position).setSelected(isSelected);
obj.getAdapter().notifyDataSetChanged();
}
});
return convertView;
}
You have to set the tag when the view is created for the first time so:
if(convertView==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//code
viewHolderItem.btnOrder= (ImageButton)rowView.findViewById(R.id.imageButton);
viewHolderItem.btnOrder.setTag(viewHolder); //set the tag for the button
convertView.setTag(viewHolder);
} else {
viewHolderItem = (ViewHolder) convertView.getTag();
}
And get it inside the click listener:
viewHolderItem.btnOrder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewHolderItem = (ViewHolder) v.getTag(); //get the tag inside on click
boolean isSelected = shoe.isSelected();
if(isSelected){
viewHolderItem.ivTick.setImageDrawable(null);
isSelected = false;
}else{
viewHolderItem.ivTick.setImageDrawable(mContext.getResources().getDrawable(R.drawable.tick));
isSelected = true;
}
shoeList.get(position).setSelected(isSelected);
obj.getAdapter().notifyDataSetChanged();
}
});
这篇关于在Android的列表视图按钮点击问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!