0

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

谢谢

4

3 回答 3

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.
    }
  });
}
于 2012-08-03T19:01:36.667 回答
2

就像你在一个按钮上一样......

设置一个点击监听器,如果你有一个数组,它看起来像这样:

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 或其他东西的适配器,而不是你现在如何做。

于 2012-08-03T16:15:26.973 回答
1

没有看到一些代码或更多解释,很难真正回答你的问题,但这里有一些提示:

在我们到达监听器之前,我们必须确保每个动态创建的按钮都知道如何响应点击事件。您可以使用setTag按钮上的方法将任意对象附加到它。此对象将表示按钮在单击时的行为。您可以只使用整数作为这个对象(可能是一些常量值),或者如果每个按钮都需要一些唯一的数据,创建一个类来维护按钮在单击时需要如何操作以及您需要的数据(或者至少是对它的引用)。

然后,您可以初始化一个处理所有按钮单击的侦听器。在onClick此侦听器的方法中放置一个分支以处理所有点击案例的条件。在创建动态按钮时,在所有动态按钮上设置此侦听器。在您的 onClick 开始时,从方法的View参数中获取标记onClick(此视图将是被单击的按钮),并使用它来决定条件的哪个分支。

希望这可以帮助。如果您的问题更具体,我们将能够提供更详细的帮助。

于 2012-08-03T16:49:11.177 回答