終於自己看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);就可以更新緩存中的界面瞭。
問題就結局瞭,如果不加上註釋的內容,緩存不會自動更新。