我完全不知道这里发生了什么。 Activity.findViewById(int)
检索到的视图上的任何操作都不会反映在用户界面上。
字符串"立即设置此文本!" (见下文)应设置为文本标签的文本,但不是。它只显示初始文本,如布局XML文件中所定义。
LoadingScreen 类:
public class LoadingScreen extends Screen {
private TextView textLabel;
public LoadingScreen(Screen parent) {
super(R.layout.screen_loading, parent);
this.textLabel = (TextView) getActivity().findViewById(R.id.loading_text_label);
this.textLabel.setText("Set this text now!");
}
}
屏幕类:
public class Screen {
private int layoutResourceId;
private int contentResourceId;
public Screen(int layoutResourceId, Screen parent) {
this.layoutResourceId = layoutResourceId;
this.parent = parent;
loadLayout();
}
private void loadLayout() {
if (this.parent == null) {
this.uiManager.getActivity().setContentView(this.layoutResourceId);
}
else {
View view = LayoutInflater.from(getActivity()).inflate(this.layoutResourceId, null);
ViewGroup container = (ViewGroup) getActivity().findViewById(this.parent.contentResourceId);
container.removeAllViews();
container.addView(view);
}
}
}
此外,以下适用:
Activity.findViewById(int)
不会抛出NullPointerException
。Looper.getMainLooper().getThread() == Thread.currentThread()
返回true
的事实,代码在UI线程上运行。如何解决?
答案 0 :(得分:0)
如果没有抛出NullPointerException
,则意味着加载了内容视图,并且UI应该更新要更改的元素(例如,调用setText(CharSequence)
来更改文本)。
上面的代码段看起来没问题。问题不在于片段,但是方法loadLayout()
被调用两次这一事实导致了内容视图被重新加载的问题,将XML布局文件中的所有元素重置为其初始值(例如{ {1}} <TextView>
}。