在外部 class 中使用 findViewById

Using findViewById in an external class

我的应用程序在布局中有很多元素(远远超过 100 个)并且在 MainActivity 中声明所有元素以便访问它们使得我的 MainActivity class 难以阅读和调试。 所以我创建了一个新的 class 来处理显示元素:

public class DisplayElementHandler extends Activity{
private EditText txtUserID;
    public void Initialise(){ //initialise all display elements
        txtUserID = (EditText) findViewById;
    }
}

但是 findViewById 没有像我预期的那样工作。

我是 Android Studio/Java 新手,这个让我很困惑 - 谁能帮忙吗?

您想将 Activity 完成的工作委托给处理程序 class。扩展 Activity 使处理程序成为它自己的 activity (另一个屏幕),这并不是您真正想要的。它应该与您现有的 Activity 交互。

这可以通过多种方式实现,但我会在构造函数中将对 activity 的引用传递给 Handler,如下所示:

 public class DisplayElementHandler {
      private Activity activity;
      public DisplayElementHandler(Activity activity) {
           this.activity = activity;
      }

      public void Initialise(){ //initialise all display elements
           txtUserID = (EditText) activity.findViewById(...);
      }
 }

然后在你的 Activity:

 public void onCreate(Bundle b) {
      super.onCreate(b);
      new DisplayElementHandler(this).Initialise();
 }

您可能还想将视图的 R.id 引用作为构造函数的一部分传递给处理程序。

好吧,一个 class 中有 100 个元素很多。也许考虑一下并找到减少这种情况的方法 :D

您尝试从外部 class 调用您的元素,因此您必须说明您的元素在哪个 class 中。您所做的只是在当前 class 中搜索。