【发布时间】:2011-09-30 03:21:47
【问题描述】:
如何从屏幕的另一部分动态改变 TextView 的内容?
我有一个 TabActivity 类,它绘制一个包含 TextView 的 RelativeLayout,后跟一个带有多个选项卡的。每个选项卡中都有一个单独的 Intent。从选项卡意图之一,我想从父 TabActvity 更改 TextView 的文本(通过 .setText)。
这可能吗?
【问题讨论】:
如何从屏幕的另一部分动态改变 TextView 的内容?
我有一个 TabActivity 类,它绘制一个包含 TextView 的 RelativeLayout,后跟一个带有多个选项卡的。每个选项卡中都有一个单独的 Intent。从选项卡意图之一,我想从父 TabActvity 更改 TextView 的文本(通过 .setText)。
这可能吗?
【问题讨论】:
你应该使用Android Architecture Components:
您可以创建一个ViewModel,其中包含您的数据对象的LiveData(LiveData<String>,如果您只想更改文本)。
当您将实时数据对象从一个Activity 或Fragment 更改时,所有其他观察此实时数据对象的活动和片段都会收到通知。
【讨论】:
TextView。
Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference
在您的 TabActivity 中创建一个设置 TextView 文本的公共方法,然后从子 Activity 调用 getParent(),将其强制转换为您的 TabActivity 类,然后调用该公共方法。
【讨论】:
您可以尝试为执行该工作的父选项卡实现一个处理程序。从您各自的每个选项卡传递消息对象中的文本。为了安全起见,请在 runOnUI 块内的处理程序中进行更改
【讨论】:
在从 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.
}
此结构将帮助您防止空指针异常。
【讨论】: