在学习android(java)中的一些编码基础知识时,我想要在不同的类中访问多个UI字段(来自xml)。我看到我可以通过扩展相关类中的Activity来解决这个问题,但这是否是可接受的编码实践?
public class Example {
TextView textview;
public Example(TextView textview) {
this.textview = textview;
}
}
public class Example extends Activity {
TextView textview;
public Example() {
this.textview = (TextView)findViewById(R.id.<xml id>);
}
}
当元素数量增加时,第二个选项对我来说似乎更干净。显然,并非每个班级本身都被视为一项活动。因此,如果有其他方式可以执行此操作,或者首选版本,请发表评论解释原因。
答案 0 :(得分:1)
重新使用预定义的布局文件绝对没有坏处。仅仅为了访问布局而扩展活动是一种非常糟糕的做法。其中包含使用MVC,MVP和MVVM等体系结构分离代码的概念。这些有助于编写和维护大型代码库。
答案 1 :(得分:1)
您可以在构造函数中引用Context(在您的案例中为Activity),然后使用您可以访问字段的上下文(Activity)的引用。完成后,您需要注意使此引用为null,否则您将持有对Context的引用,这可能会导致活动泄漏。我建议你使用WeakReference of Activity,当你需要它时,只需检查包含的Activity引用是否为null。
第二种方式并不好,因为你的类实际上不是一个实际的活动(你只是扩展到访问字段)并且偏向于Composition总是更好。
答案 2 :(得分:1)
Activity
类不应用于与显示UI不同的用途,也不应使用构造函数创建。如果您需要从另一个类(可能是Utility类)访问资源,请将Context
传递给它,并使用它来按ID检索资源。
答案 3 :(得分:0)
您可以将上下文(您的用例的活动参考)作为辅助类函数中的参数发送,以访问资源。
活动类通常会扩展为显示为UI的一部分。
或者,它可以用作其他ActivityClasses的基类。基类应标记为抽象,以指定它仅由其他ActivityClasses扩展,您也不需要在AndroidManifest文件中提及您的基类。