安卓生成的ID真的是不可变的吗?



我在包含 9 个按钮的 Android 应用程序中定义了一个活动。每个按钮都必须侦听相同的事件侦听器。

查看生成的 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环境来构建应用程序。

我担心如果你的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) {
             ...
        }
   });
}

最新更新