Android 从类(非活动)访问Textview

Android 从类(非活动)访问Textview,android,Android,我有一个扩展AppCompatActivity的主活动,这个活动可以轻松访问TextView,而我有另一个java类需要访问同一个TextView。。。我找不到 检查下面的代码:- 在您的活动中:- TextView txtview = (TextView)findviewbyId(R.id.tv); MyJavaClass jav = new MyJavaClass(); jav.setTextView(txtview); class MyJavaClass { TextView tv

我有一个扩展AppCompatActivity的主活动,这个活动可以轻松访问TextView,而我有另一个java类需要访问同一个TextView。。。我找不到

检查下面的代码:-

在您的活动中:-

TextView txtview = (TextView)findviewbyId(R.id.tv);

MyJavaClass jav = new MyJavaClass();

jav.setTextView(txtview);
class MyJavaClass {

TextView tv ;

public void setTextView(TextView view){
this.tv = view;
}
}
现在在Java类中:-

TextView txtview = (TextView)findviewbyId(R.id.tv);

MyJavaClass jav = new MyJavaClass();

jav.setTextView(txtview);
class MyJavaClass {

TextView tv ;

public void setTextView(TextView view){
this.tv = view;
}
}

首先,为什么要直接从另一个类访问TextView

那个类是活动、片段还是java类

虽然,, 您可以创建一个静态文本视图,并可以在另一个类中访问它。 但要注意活动生命周期,若活动停止,则TextView的引用将为空

最后,不要使用静态

根据OOAD,最好不要将TextView传递给另一个类


为什么我的答案是-1?

我认为最好尽可能将Android框架对象(特别是那些扩展上下文(视图、活动、片段等)与代码的其余部分隔离开来

与其将TextView公开给“普通”java对象,不如定义一个没有Android上下文的接口,并将其传递给“普通”java对象


另一个有效的策略是使用消息总线(或充当总线的RxJava主题),以在包含TextView的活动和普通java对象之间进行通信。例如,让普通java对象通过消息通知活动更改TextView的内容。

您可以将TextView设置为公共和静态,就像sopublic static TextView myTextView;并且在onCreatemyTextView=findViewById(R.id.my_text_视图)中一样;然后您可以在其他类中使用该文本视图,例如在另一个类中访问文本视图并不奇怪-有一些很好的理由,包括帮助函数和策略模式。但决不要持有对视图的静态引用-视图持有对活动的引用。持有对活动的静态引用将导致该活动无法运行答:正确的答案是通过构造函数/方法参数传入,而不是将其传递给任何不属于活动范围的对象。@Gabeschen我也不建议使用静态引用。最好与接口通信。尽管将其传递给构造函数也是一个不错的选择