Android生成的ID真的不可变吗?

时间:2012-05-29 18:14:29

标签: java android

我在包含9按钮的Android应用中定义了一个Activity。每个按钮都必须监听同一个事件监听器。

查看生成的R类,定义了它们的ID:

 public static final int btn1=0x7f040001;
 ...
 public static final int btn1=0x7f040009;

我的问题是:可以在for循环中添加循环ID的侦听器吗?

for (int i= R.id.btn1; i<=R.id.btn9;i++)
{
   Button button = (Button)findViewById(i);
   button.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
             ...
        }
   });
}

或者在某些情况下,Id会被编译器重新分配,破坏我的代码?

我正在使用Intellij Idea环境来构建应用程序。

1 个答案:

答案 0 :(得分:8)

我担心如果您的R文件使用非连续ID重新生成,这将是一个非常糟糕的主意..您最好的选择是存储包含您的ID的int数组并循环通过

离。

int[] views = new int[] { R.id.btn1, R.id.btn2, R.id.btn3, ...... R.id.btn9 };

for (int i= 0; i< views.length ;i++)
{
   Button button = (Button)findViewById(views[i]);
   button.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
             ...
        }
   });
}