我有一个动态的按钮阵列,我想知道如何处理每个按钮上的onclick?
由于
答案 0 :(得分:5)
我认为不需要为每个按钮创建一个新的OnClickListener - 所有按钮都可以共享一个监听器。
private OnClickListener myListener = new OnClickListener() {
public void onClick(View v) {
Object tag = v.getTag();
// Do something depending on the value of the tag
}
};
...
for (int i=0; i < btns.length; ++i) {
btns[i].setOnClickListener(myListener);
btns[i].setTag(some_identifying_information);
}
当然,您可以为每个按钮创建一个唯一的OnClickListener,并以此方式利用:
for (int i=0; i < btns.length; ++i) {
final Button btn = btns[i];
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// do something depending on the value of btn, which you're allowed
// to reference here because it was declared final above.
}
});
}
答案 1 :(得分:2)
与单个按钮的方式相同......
设置一个on click侦听器,如果你有一个Array,它将如下所示:
btns[0].setOnClickListener(new OnClickListener() {
public void onClick(View v){
//do something
}
});
btns[1].setOnClickListener(new OnClickListener() {
public void onClick(View v){
//do something
}
});
//etc.
如果你想让他们所有人做同样的事情,你可以使用for循环遍历数组,如下所示:
for(int i = 0; i< btns.length; i++){
btns[i].setOnClickListener(new OnClickListener() {
public void onClick(View v){
//do something
}
});
}
我不确切知道你在做什么,但是如果你有一个按钮数组,你可能应该使用带有ListView的适配器或其他东西,而不是你现在每个人都在做什么。
答案 2 :(得分:1)
如果没有看到某些代码或更多解释,很难真正回答您的问题,但这里有一些提示:
在我们到达听众之前,我们必须确保每个动态创建的按钮都知道如何响应click事件。您可以使用按钮上的setTag
方法将任意对象附加到其中。此对象将表示按钮在单击时的行为方式。您可以使用Integers作为此Object(可能是一些常量值),或者如果每个按钮都需要一些唯一数据,则创建一个类,该类维护按钮在单击时需要执行的操作以及您需要的数据(或至少对其进行引用) )。
然后,您可以初始化一个处理所有按钮点击的侦听器。在此侦听器的onClick
方法中放置一个条件,该分支用于处理所有单击案例。在创建它们时,在所有动态按钮上设置此侦听器。在onClick开始时,从View
方法的onClick
参数中获取标记(此视图将是单击的按钮),并使用它来决定条件的哪个分支
希望这会有所帮助。如果您更具体地提出问题,我们将能够提供更详细的帮助。