Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 传递活动并修改其视图_Android_Oop - Fatal编程技术网

Android 传递活动并修改其视图

Android 传递活动并修改其视图,android,oop,Android,Oop,我有一个活动类A,它有几个文本视图作为其成员变量。类具有三个TextView的getter方法。我可以将a的引用传递给B类并修改三个文本视图吗?这是好的编程实践吗 编辑:代码- 甲级 public class A extends Activity { private TextView tv1; private TextView tv2; private TextView tv3; @Override protected void onCreate(Bu

我有一个活动类A,它有几个文本视图作为其成员变量。类具有三个TextView的getter方法。我可以将a的引用传递给B类并修改三个文本视图吗?这是好的编程实践吗

编辑:代码-

甲级

public class A extends Activity {

    private TextView tv1;
    private TextView tv2;
    private TextView tv3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // initialize tv1, tv2, tv3 here

        // Pass a referce of A to B.
        new B(this);
    }

    public TextView getTv1() {
        return tv1;
    }

    public TextView getTv2() {
        return tv2;
    }

    public TextView getTv3() {
        return tv3;
    }
}
B类-

public class B {
    public B(A a){
        a.getTv1().setText("Is");
        a.getTv2().setText("this");
        a.getTv3().setText("correct?");
    }
}

您可以,您只需确保您在主线程上对
视图所做的任何操作。从其他线程可以使用
runOnUiThread

您还可以使用
处理程序
。在
活动
中定义
处理程序
,并从任意位置向该处理程序发布消息。然后,它们将在主线程上进行处理

它可能只有在您的活动可见且另一个类正在运行某个线程时才有意义,以便在视图可见时更新视图。否则,如果活动不可见,您可以在
onResume
onStart

不过,在这种情况下,使用
处理程序来避免太多依赖项似乎是可以的


编辑:在您发布的代码中,为什么需要
B

这只是示例代码。在我的实际代码中,类A非常长(超过1000 LOC)。这是因为一个私有WebViewClient类(~200行)试图修改大多数成员变量。我想让它成为一个独立的公共类,以提高可读性。这不是一个最佳实践。相反,您可以使用
Intent
将值从A传递到B。我猜它不能通过Intent从A传递到B,因为B不是活动。或者如果我们在B中传递该活动的上下文。