zoukankan      html  css  js  c++  java
  • 自定义导航栏,实现缓存,更新缓存,提高效率

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

    问题就结局了,如果不加上注释的内容,缓存不会自动更新。


  • 相关阅读:
    linux sed的使用
    linux 服务的操作
    Js apply方法详解,及其apply()方法的妙用
    call()方法和apply()方法
    javascript中的深拷贝和浅拷贝
    移动web适配利器-rem
    js 函数讲解
    try…catch 结构
    Git使用之(pathspec master did not match any file(s) known to git)
    微信小程序使用函数的三种方法
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3172184.html
Copyright © 2011-2022 走看看