我创建了一个带有ImageView,两个TextView和一个Button的自定义列表视图 现在,当我尝试将onClicklistner设置为该按钮时,我正面临问题 我希望每个按钮都有不同的方法
这是我的customlistview类的代码 我使用临时onclicklistner为该按钮显示吐司“买了” 我想要做的是点击按钮后我必须退回食物的价格。
class CustomListView extends ArrayAdapter {
public CustomListView(Context context, String[] resource) {
super(context,R.layout.custom_view , resource);
}
Toast toast= null;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater MyInflater = LayoutInflater.from(getContext());
View CustomView = MyInflater.inflate(R.layout.custom_view, parent, false);
String SingleItem= (String) getItem(position);
final TextView text =(TextView)CustomView.findViewById(R.id.Itemname);
final ImageView Image= (ImageView)CustomView.findViewById(R.id.icon);
final TextView Pricetag= (TextView)CustomView.findViewById(R.id.PriceTextView);
text.setText(SingleItem);
switch (SingleItem)
{
case "Chicken":
Image.setImageResource(R.drawable.desert1);
Pricetag.setText("Rs 300");
break;
case "soap":
Image.setImageResource(R.drawable.desert2);
Pricetag.setText("Rs 300");
break;
case "Fish":
Image.setImageResource(R.drawable.fish);
Pricetag.setText("Rs 100");
break;
default:
Image.setImageResource(R.drawable.myimage);
Pricetag.setText("Rs 0.00");
break;
}
final Button Buybutton= (Button)CustomView.findViewById(R.id.BuyButton);
toast = Toast.makeText(getContext(), "", Toast.LENGTH_LONG);
Buybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toast.setText("Bought");
toast.show();
}
});
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toast.setText(text.getText().toString());
toast.show();
}
});
return CustomView;
}
}
答案 0 :(得分:0)
为了记录,应该有更好的方法来实现这一点,使用food-id或其他方法来防止这种情况,但根据您的要求,我们在这里:
当您在按钮上获得引用时,getView()
中的1 - ,即:
final Button Buybutton= (Button)CustomView.findViewById(R.id.BuyButton);
再做一步:
Buybutton.setTag(10);
10这里可以是任何其他数字,你需要找到一种方法来确定每个按钮使用哪个数字,也可以是一个字符串,ex值为SingleItem
Buybutton.setTag(SingleItem);
在onClick()
处2 - 您需要找出分配给视图(按钮)的值,并根据此值调用正确的方法:
@Override
public void onClick(View v) {
if (v.getTag().toString().equals("xxxxx")){
doSomething();
}else if (v.getTag().toString().equals("yyyy")){
doAnotherThing();
}else if (v.getTag().toString().equals("zzzzz")){
doSomething12();
}
//and so on...
}
此方法在setTag()
和getTag()
中使用String作为值
如果你使用整数,只需将条件替换为belwo:
if (Integer.parseInt(v.getTag().toString()) == 10)
修改强>
如果我理解得很好,那么你需要:
Buybutton.setTag(SingleItem);
和onClick():
@Override
public void onClick(View v) {
showPriceTag(v.getTag().toString());
}
添加方法showPriceTag()
:
public void showPriceTag(String type){
switch (type)
{
case "Chicken":
//set the price tag data ...
break;
case "soap":
//set the price tag data ...
break;
case "Fish":
//set the price tag data ...
break;
default:
//set the default price tag data ...
break;
}
}