Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 自定義導航欄,實現緩存,更新緩存,提高效率

自定義導航欄,實現緩存,更新緩存,提高效率

編輯:關於Android編程

終於自己看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);就可以更新緩存中的界面了。

問題就結局了,如果不加上注釋的內容,緩存不會自動更新。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved