我有一个视图,通过列表视图添加行。列表项水平跟随: 复选框-Checkbox, 物品名称 - textView, 减号按钮 - 图像按钮, 数量 - textview, 添加按钮。 - 图像按钮
我需要根据加减点击更新数量。我可以通过getTag()获取添加按钮位置,但无法获得相应的数量来更新它.Below是适配器类
public class CustomAdapter extends BaseAdapter {
private List<String> mListItems;
private LayoutInflater mLayoutInflater;
private Context mContext;
ItemDBAdapter itemDB;
ViewHolder holder;
int a =1;
public CustomAdapter(Context context,ArrayList<String> arrayList){
mContext=context;
mListItems=arrayList;
mContext=context;
//get the layout inflater
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListItems.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
private static class ViewHolder {
TextView itemName,quantity;
CheckBox checkbox;
ImageButton addBtn,minusBtn;
}
@Override
public View getView(int position, View convertview, ViewGroup viewGroup) {
// create a ViewHolder reference
//check to see if the reused view is null or not, if is not null then reuse it
if (convertview == null) {
holder = new ViewHolder();
convertview = mLayoutInflater.inflate(R.layout.list_item, null);
/* holder.itemName=new TextView(mContext);
holder.checkbox=new CheckBox(mContext);
holder.quantity=new TextView(mContext);
holder.addBtn=new ImageButton(mContext);
holder.minusBtn=new ImageButton(mContext)*/;
holder.itemName = (TextView) convertview.findViewById(R.id.item_name);
holder.addBtn = (ImageButton) convertview.findViewById(R.id.add);
holder.minusBtn = (ImageButton) convertview.findViewById(R.id.minus);
holder.quantity = (TextView) convertview.findViewById(R.id.item_quantity);
holder.checkbox = (CheckBox) convertview.findViewById(R.id.cbBox);
holder.checkbox.setOnCheckedChangeListener(checkListener);
holder.checkbox.setTag(position);
holder.minusBtn.setImageResource(R.drawable.minus);
holder.quantity.setText(String.valueOf(a));
holder.quantity.setTag(position);
holder.addBtn.setImageResource(R.drawable.add);
holder.addBtn.setOnClickListener(addBtnClick);
holder.addBtn.setTag(position);
//holder.minusBtn.setOnClickListener(minusBtnClick);
holder.minusBtn.setTag(position);
// the setTag is used to store the data within this view
convertview.setTag(holder);
} else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertview.getTag();
}
//get the string item from the position "position" from array list to put it on the TextView
String stringItem = mListItems.get(position);
if (stringItem != null) {
if (holder.itemName != null) {
//set the item name on the TextView
holder.itemName.setText(stringItem);
}
}
//this method must return the view corresponding to the data at the specified position.
return convertview;
}
private OnClickListener addBtnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stube
int b = (Integer) v.getTag();
a = a + 1;
holder.quantity.setText(String.valueOf(a));
}
};
}
由于数量不可点击,我无法获得更新数量的特定位置。请指教。感谢。
答案 0 :(得分:1)
尝试以下
在onClick
private OnClickListener addBtnClick = new OnClickListener() {
@Override
public void onClick(View v) {
View view = (View) v.getParent();
TextView tv = (TextView) view.findViewById(R.id.item_quantity);
int value = Integer.parseInt(tv.getText().toString());
value=value+1;
tv.setText(String.valueOf(value));
}
};
编辑:最好使用ViewHolder进行平滑滚动和性能
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
答案 1 :(得分:0)
在if(convertView == null)块中只获取视图和setTag的引用,在else部分获取前一个标记。在其他之后应用所有其他的东西
更改你的代码......
public View getView(int position, View convertview, ViewGroup viewGroup) {
// create a ViewHolder reference
//check to see if the reused view is null or not, if is not null then reuse it
if (convertview == null) {
holder = new ViewHolder();
convertview = mLayoutInflater.inflate(R.layout.list_item, null);
holder.itemName = (TextView) convertview.findViewById(R.id.item_name);
holder.addBtn = (ImageButton) convertview.findViewById(R.id.add);
holder.minusBtn = (ImageButton) convertview.findViewById(R.id.minus);
holder.quantity = (TextView) convertview.findViewById(R.id.item_quantity);
holder.checkbox = (CheckBox) convertview.findViewById(R.id.cbBox);
// the setTag is used to store the data within this view
convertview.setTag(holder);
} else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)convertview.getTag();
}
holder.checkbox.setOnCheckedChangeListener(checkListener);
holder.minusBtn.setImageResource(R.drawable.minus);
holder.quantity.setText(String.valueOf(a));
holder.addBtn.setImageResource(R.drawable.add);
holder.addBtn.setOnClickListener(addBtnClick);
//get the string item from the position "position" from array list to put it on the TextView
String stringItem = mListItems.get(position);
if (stringItem != null) {
if (holder.itemName != null) {
//set the item name on the TextView
holder.itemName.setText(stringItem);
}
}
//this method must return the view corresponding to the data at the specified position.
return convertview;
}