使用按钮OnClickListener自定义列表视图

时间:2016-04-06 14:12:08

标签: android listview android-arrayadapter

我创建了一个带有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;
 }
}

1 个答案:

答案 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;
        }
}