Android应用程序 - 按钮数组,无法实现OnClick侦听器

时间:2011-02-10 18:38:01

标签: android

想象一下您可以订购的产品列表(餐馆的食物菜肴),右侧是减号按钮,文本视图显示数量和加号按钮。我使用了for循环,因为我不知道有多少产品。我使用了一系列数组......

public class menuActivity
    extends Activity
    implements OnClickListener
{
    String[] dishes = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
    int dishQuantity =10;
    LinearLayout linear;
    LinearLayout L1, L2;
    TableLayout table;
    Button[] plus = new Button[dishQuantity];
    Button[] minus = new Button[dishQuantity];
    TextView[] text = new TextView[dishQuantity];
    TableRow[] row = new TableRow[dishQuantity];
    TextView[] quantityArray = new TextView[dishQuantity];
    int[] quantityValue = new int[dishQuantity];

    // declares import of widgets
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        linear = new LinearLayout(this);
        table = new TableLayout(this);
        linear.setOrientation(LinearLayout.VERTICAL);
        // declares Layouts and sets Properties
        for (int i =0; i<dishQuantity; i++){
            quantityValue[i]=0;
        }

        // sets quantityValue for each dish to 0
        for (int i=0; i<dishQuantity; i++) {

             row[i] = new TableRow(this);
             text[i] = new TextView(this);
             plus[i] = new Button(this); 
             minus[i] = new Button(this);
             quantityArray[i] = new TextView(this);

             // declares import arrays
             plus[i].setText("+");
             minus[i].setText("-");          
             text[i].setText(dishes[i]);
             quantityArray[i].setText(String.valueOf(quantityValue[i]));

             // sets values
             plus[i].setOnClickListener(this);
             minus[i].setOnClickListener(this);

             row[i].addView(text[i]);
             row[i].addView(minus[i]);
             row[i].addView(quantityArray[i]);
             row[i].addView(plus[i]);

             // adds all widgets to corresponding row
             table.addView(row[i]);
             // adds current row to TableLayout
        } 

        linear.addView(table);

        // adds current table to parent Linear Layout - linear
        setContentView(linear);
        // sets parent Linear Layout - linear to content

    }

    public void onClick(View arg0) {
    // TODO Auto-generated method stub

}



}

显然,如果他们点击产品2的加号按钮,我需要增加产品2的quantityValue,但我无法弄清楚如何在onClick部分设置它并分离出按钮

另外,我如何更改按钮的重力以使它们右对齐

plus[0].setGravity(RIGHT);

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

您可以做的是为每个按钮指定一个从数组中获取的ID,并使用setId()进行分配。

然后你可以在你的onclick中从视图中获取id,这样你就知道按下了什么按钮:

public void onClick(View arg0) {
    //use a switch with cases for each of the known ID's, and add your code there.
}

正如评论中所述,很快,很抱歉任何错误 再想一想,在你制作按钮的循环中添加你的id。然后创建一个函数,找到连接到此id的正确项。然后你可以做类似的事情:

public void onClick(View arg0) {
    int myId = arg0.getId();
    int myDish = findDishFromId(myId);
    addOne(myDish);
}

所以你要findDishFromId,找到正确的菜。可能是循环中与i相关的东西。 比如,当你找到这道菜时,你可以addOne或者做出反应,或者其他什么。

抱歉,我不能更具体,必须跑:D

答案 1 :(得分:1)

您还可以创建将处理每一行元素的私有类,如下面提供的示例。它将关注它的元素,并且可以在一个地方简单地改变它。在本课程中,您将知道单击+或 - 按钮应更改其TextView中的值。

private class OneRowHandler implements OnClickListener
{
Button plus;
Button minus;
TextView quantity;

public OneRowHandler(Button pl, Button mi, TextView q) {
    plus = pl;
    minus = mi;
            quantity = q;
    plus.setOnClickListener(this);
    minus.setOnClickListener(this);
}

public void onClick(View arg0) {
    if (arg0 == plus) {
        // do ++
    } else if (arg0 == minus) {
        // do --
    }
}
}

答案 2 :(得分:0)

我认为您需要为每个按钮设置标记,然后才能添加它们:

            View bv = (View) myButton;
            bv.setTag(value);

对于值,您可以使用像i ++这样的整数。然后点击

buttonCode =(整数)v.getTag();

会告诉您确切按下了哪个按钮。您可以在视图的标记中存储任何内容,例如引用和对象。

对于每个按钮,您可以在使用addView和其他属性之前设置填充

myButton.setPadding(10,5,5,10);