【问题标题】:Modify the value of TextView from an external class从外部类修改 TextView 的值
【发布时间】:2013-08-14 18:55:06
【问题描述】:

我有一个活动myActivity,其中包含一个TextView myTv,另一个类myClass 具有单一方法modifyTv

如何使用modifyTv 方法修改myTv 的值?

class myActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myClass myc = new myClass();
    myc.modifyTv();// this line of code must be able to modify myTv value.

}
}

【问题讨论】:

    标签: android class android-activity textview


    【解决方案1】:

    您有多种选择:

    1. 将更多信息传递给构造函数。例如,ContextmyTv。例如:

    public class MyClass {
        Context context;
        public MyClass(Context context) {
            this.context = context;
        }
        public void modifyTv() {
            TextView tv = (TextView) context.findViewById(R.id.myTv);
            tv.setText("Foobar");
        }
    }
    

    然后只需调用:

    MyClass m = new MyClass(this);
    m.modifyTv();
    

    2. 将更多信息传递给modifyTv() 方法。

    public class MyClass {
    
        public void modifyTv(TextView tv) {
            tv.setText("Foobar");
        }
    }
    

    然后只需调用:

    MyClass m = new MyClass();
    m.modifyTv((TextView) findViewById(R.id.tv));
    

    3. 其他更复杂但没有多大意义的方法。

    【讨论】:

    • 不要在 Android 上传递 Activity 上下文,它们会在旋转时被销毁和重新创建,也很容易导致内存泄漏--curious-creature.org/2008/12/18/avoid-memory-leaks-on-android
    • @edthethird 所以不推荐第一个选项?
    • 不,尽可能避免这种情况。最好传递TextView 本身而不是Context。选项 2,与我的答案相同是我推荐的。
    【解决方案2】:

    在“myClass”中,您需要引用您的活动,以便您可以调用

    activity.findViewById(R.id.text_id)
    

    您可以在构造函数中传递活动或在myClass 中创建setCurrentActivity 方法

    或者,更容易引用TextView 本身。

    【讨论】:

    • 通过活动是指myActivity 吗?
    • 完全正确 ;) 但最简单的方法是传递 @edthethird 所指向的 TextView
    【解决方案3】:

    好吧,你可以这样做:

    myc.modifyTv(myTextView);

    只需将要修改的 TextView 作为参数传递。

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多