为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻阅古今 2019-12-27 15:41:32
我是Android / Java编程的新手。我有两个班,一个是Activity普通班。我的活动课程包含一个TextView。我可以TextView从普通班更新活动班的吗?我尝试使用随机代码,但失败了。// activity classpublic class MainMenu extends Activity {    public TextView txtView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView txtView = (TextView)findViewById(R.id.text);       }}// Other classpublic class ClassB {    public ClassB() {        public void Update() {            TextView txtView = (TextView)findViewById(R.id.text);            txtView.setText("Hello");        }    }}
查看完整描述

3 回答

?
慕田峪9158850

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。


查看完整回答
反对 回复 2019-12-27
?
ITMISS

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");

   }


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 695 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信