我正在Activity上使用ActionBar。对于每个选项卡,我都显示不同的布局。由于布局太重了,所以我将每个布局都填充到一个视图中。因此,在每个选项卡选择时
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mView == null) {
mView = LayoutInflater.from(mAct).inflate(mLayout, null); // mAct is Activity reference
}
mAct.setContentView(mView);
for (int i = 0; i < mFrags.length; i++) {
mFrags[i] = (LutronFragment) mAct.getFragmentManager()
.findFragmentById(mIds[i]);
if (mFrags[i] != null) {
mFrags[i].setupHeader();
}
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
for (Fragment f : mFrags) {
try {
if (f != null) {
ft.remove(f);
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
现在如果我第二次选择选项卡并对该选项卡进行一些操作,应用程序会在getActivity()处崩溃。(NullPointerException)
请建议是否有其他方法可以缓存重型布局。
mAct
变成了 null 吗? 此外,缓存布局没有意义,你应该在后台加载布局,而前台应该有一些用户界面,比如进度对话框或某种中间用户可交互的屏幕。 最后,请考虑减少布局的权重,或按需加载元素。你能发布你的布局 xml 文件来查看它是否真的很重吗? - gaara87