如何在按钮数组上管理setOnClickListener

时间:2012-08-03 16:04:26

标签: android android-layout android-widget

我有一个动态的按钮阵列,我想知道如何处理每个按钮上的onclick?

由于

3 个答案:

答案 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参数中获取标记(此视图将是单击的按钮),并使用它来决定条件的哪个分支

希望这会有所帮助。如果您更具体地提出问题,我们将能够提供更详细的帮助。