【发布时间】:2012-07-18 07:19:37
【问题描述】:
我在 Activity 上使用操作栏。对于每个选项卡,我都显示了不同的布局。由于布局太重。所以我将每个布局膨胀成一个视图。所以在每个选项卡上选择
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变为空吗?此外,缓存布局没有意义,您应该做的是在后台加载布局,而前台应该有一些用户界面,如进度对话框或某种中间用户可交互屏幕。最后,考虑减少布局的重量,或按需加载元素。您可以发布您的布局 xml 以查看它是否真的很重?