【问题标题】:Changing text from another activity从另一个活动更改文本
【发布时间】:2011-09-30 03:21:47
【问题描述】:

如何从屏幕的另一部分动态改变 TextView 的内容?

我有一个 TabActivity 类,它绘制一个包含 TextView 的 RelativeLayout,后跟一个带有多个选项卡的。每个选项卡中都有一个单独的 Intent。从选项卡意图之一,我想从父 TabActvity 更改 TextView 的文本(通过 .setText)。

这可能吗?

【问题讨论】:

    标签: android settext


    【解决方案1】:

    你应该使用Android Architecture Components

    您可以创建一个ViewModel,其中包含您的数据对象的LiveDataLiveData<String>,如果您只想更改文本)。

    当您将实时数据对象从一个ActivityFragment 更改时,所有其他观察此实时数据对象的活动和片段都会收到通知。

    Official API doc has complete example with description

    【讨论】:

    • 请注意,这将改变堆栈中该类的每个实例的 TextView
    • “不要将 Android 上下文类放在静态字段中;这是内存泄漏(也会破坏 Instant Run)”——不再是更好的解决方案。在将其设为静态时,您将在 Android Studio 中收到此警告。有更好的解决方案吗?
    • 给我一个 NullPointerException。 Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference
    • @AneesU 同意,更新过时且不正确的答案:)
    【解决方案2】:

    在您的 TabActivity 中创建一个设置 TextView 文本的公共方法,然后从子 Activity 调用 getParent(),将其强制转换为您的 TabActivity 类,然后调用该公共方法。

    【讨论】:

    • 哇,这是个好主意,将所有内容都保留在 TabActivity 类中。一定会试试这个。
    【解决方案3】:

    您可以尝试为执行该工作的父选项卡实现一个处理程序。从您各自的每个选项卡传递消息对象中的文本。为了安全起见,请在 runOnUI 块内的处理程序中进行更改

    【讨论】:

    • 谢谢...我确实想过并尝试了它,但可能实现不正确。好建议。
    【解决方案4】:

    在从 asynctask 文件中更改文本的情况下,您需要实现一个带有侦听器的接口。示例:

    异步任务文件:

    OnReadyListener onReadyListener;
    
    public class ABCAsynctaskFile{
    
       ...
    
       onReadyListener.onReady();
    
    }
    
    public interface OnReadyListener{
    
    void onReady();
    
    }
    
    
    public void setOnReadyListener(OnReadyListener onReadyListener){
    
    this.onReadyListener = onReadyListener;
    
    }
    

    活动文件:

    public class ABC extends AppCompactActivity implements ABCAsynctaskFile.OnReadyListener{
       ..
    
       ABCAsynctaskFile aBCAsynctaskFileObj = new ABCAsynctaskFile(context);
    
       aBCAsynctaskFile.setOnReadyListener(ABC.this)
    
    }
    
    @Override
    
    public void onReady(){
    
       // Your wished changed in edit text.
    
    }
    

    此结构将帮助您防止空指针异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多