3 回答

TA贡献1794条经验 获得超7个赞
前两个示例要求TextView直接在另一个类中使用。但是,在某些情况下,TextView其他类中不应出现,例如,您ClassB用于更新各种Activity,其中一些activity更新了TextViews,而另一些可能更新了EditTexts。
因此,下面的解决方案可以指导您如何将您的TextView课程与其他课程脱钩,但是,您仍然可以实现所需的内容。它使用接口方法。
首先,声明一个接口,您可以在其中ClassB与活动进行通信,然后调用它MyCallback:
public interface MyCallback {
// Declaration of the template function for the interface
public void updateMyText(String myString);
}
接下来,在Activity中,实现MyCallback,从而实现其功能定义。在此函数中,您将收到ClassB可以执行任何操作的字符串,例如,更新TextView(或EditText等):
public class MyActivity extends AppCompatActivity implements MyCallback {
// ... whatever code of your activity
@Override
public void updateMyText(String myString) {
((TextView)findViewById(R.id.text)).setText(myString);
}
}
最后,您可以声明ClassB接管MyCallback(即,您的Activity类对象也是MyCallback)。从那里,您可以用来ClassB与Activity通信,并TextView通过updateMyText功能来更新它:
public class ClassB {
MyCallback myCallback = null;
public ClassB(MyCallback callback) {
this.myCallback = callback;
}
public void doSomething() {
// Do something to get String
String myString = str;
if (myCallback != null) {
myCallback.updateMyText(myString);
}
}
}
希望这有助于更好地显示将Activity与正确解耦的体系结构ClassB。

TA贡献1871条经验 获得超8个赞
您必须通过构造函数传递Context引用。
public class ClassB {
Context context;
public ClassB(Context context){
this.context=context;
}
public void Update(){
TextView txtView = (TextView) ((Activity)context).findViewById(R.id.text);
txtView.setText("Hello");
}
添加回答
举报