如何在Activity之外访问findViewById()

时间:2017-10-14 12:34:16

标签: java android

如何将findViewById作为参数传递?

我想创建方法:

public void makeText() {
    String random = randomize(); //example...
    TextView textView = (TextView) findViewById(R.id.textView);
    textView.setText(randomText);
}

但是这个方法当然没有函数findViewById。方法makeText位于ActivityFragment类之外。

3 个答案:

答案 0 :(得分:4)

您应该将活动实例传递给您的班级或方法。

public void makeText(Activity activity) {
    String random = randomize(); //example...
    TextView textView = (TextView) activity.findViewById(R.id.textView);
    textView.setText(randomText);
}

答案 1 :(得分:2)

首先,编辑控件属性超出activity或fragment类是个坏主意。将上下文对象作为Activity传递也不是最好的想法,但我必须将它作为参数传递ViewGroup,它是视图的根,并在其上调用findViewById

个人我建议传递给您想要编辑的方法。

答案 2 :(得分:1)

将活动的实例作为参数传递是反模式并乞求内存泄漏。

经验法则是:如果你想操纵视图,在UI图层(活动/片段/自定义视图等)上进行操作,但不要再进一步传递它们。

因此,如果您想编辑文本,请在activity / fragment /之内充实此视图,并将新视图传递给它。