终于自己看api搞明白 类似导航栏的页面如何提高效率,缓存多组页面,根据需要更新了.需求是这样的,有个导航栏,其中点击一个可以进入很多歌一级界面。这样就要区分什么时候使用缓存,什么时候要更新缓存,来显示最新的信息。显示看了网上的分析,同事之前写好的代码如下:
protected void onTabClicked(int tab, Intent intent) {
if (tab != -1) {
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
String activityId = ACTIVITY_ID_PRE + mTabIndex[tab];
if (SlimConf.INFO)
Log.i(TAG, " activityId =" + activityId);
View root = null;
Window window = getLocalActivityManager().startActivity(activityId,
intent);
if (window != null) {
root = window.getDecorView();
}
if (root != null) {
switchView(tab, root);
}
}
}
void switchView(int tab, View currentView) {
boolean flag = false;
for (int i = 0; i < viewList.size(); i++) {
View view = viewList.get(i);
if (view != null) {
if (!view.equals(currentView)) {
view.setVisibility(View.GONE);
} else if (view.equals(currentView)) {
//if (tab == TAB_TEAM) {
//
//if (!teamTag.equals(PrefConf.getString(
//PrefConf.TEAM_STATE, "init"))) {
//
//ViewGroup parent = (ViewGroup) currentView
//.getParent();
//parent.childDrawableStateChanged(currentView);
//}
//flag = true;
//view.setVisibility(View.VISIBLE);
//
//} else {
flag = true;
view.setVisibility(View.VISIBLE);
//}
}
}
}
if (!flag) {
if (tab == TAB_TEAM) {
teamTag = PrefConf.getString(PrefConf.TEAM_STATE, "d");
}
viewList.add(currentView);
mTabLayout.addView(currentView);
// mTabLayout.invalidate();
}
}
前面的界面缓存就一笔带过了,其实就是activityManager得到Window对象,在通过这个window对象的getDecorView()方法得到一个activity的view,然后得到的view放到一个viewgroup中,如上面的mTabLayout;当然需要一个list来存放这些view,以便控制他们的显示(viewList)。
注释掉的部分就是我后来加上的,思路是,当点击team模块时,判断已有字段teamTag和preference中的是否相同,不相同说明界面有变化。这时候再parent.childDrawableStateChanged(currentView);就可以更新缓存中的界面了。
问题就结局了,如果不加上注释的内容,缓存不会自动更新。