在外部 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 中搜索。
我的应用程序在布局中有很多元素(远远超过 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 中搜索。