想象一下您可以订购的产品列表(餐馆的食物菜肴),右侧是减号按钮,文本视图显示数量和加号按钮。我使用了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);
非常感谢任何帮助
答案 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);