如何从另一个类更新活动的TextView

我是Android / Java编程的新手。我有两个班,一个是Activity普通班。我的活动课程包含一个TextView。我可以TextView从普通班更新活动班的吗?我尝试使用随机代码,但失败了。


// activity class

public class MainMenu extends Activity {

    public TextView txtView;


    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TextView txtView = (TextView)findViewById(R.id.text);   

    }

}


// Other class

public class ClassB {

    public ClassB() {

        public void Update() {

            TextView txtView = (TextView)findViewById(R.id.text);

            txtView.setText("Hello");

        }

    }

}


翻阅古今
浏览 698回答 3
3回答

慕田峪9158850

前两个示例要求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。

ITMISS

您必须通过构造函数传递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");   }
打开App,查看更多内容
随时随地看视频慕课网APP