自定义导航栏,实现缓存,更新缓存,提高效率
2013-07-04 19:12
351 查看
终于自己看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);就可以更新缓存中的界面了。
问题就结局了,如果不加上注释的内容,缓存不会自动更新。
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);就可以更新缓存中的界面了。
问题就结局了,如果不加上注释的内容,缓存不会自动更新。
相关文章推荐
- 自定义导航栏,实现缓存,更新缓存,提高效率
- 发挥缓存的威力,提高代码效率,及如何实现16位浮点数
- Spring-Boot 集成Redis实现查询缓存提高查询效率减轻数据库访问压力(涉及key的添加和删除)
- 引用iBatis中oscache实现自定义缓存及动态更新技巧
- 发挥缓存的威力,提高代码效率,及如何实现16位浮点数
- 引用iBatis中oscache实现自定义缓存及动态更新技巧
- NSCache:实现缓存的类可以提高效率
- 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- ASP.NET 缓存分析和实践浅析提高运行效率
- 用自定义缓存区的方式实现文件的移动
- spring整合ehcache注解实现查询缓存,并实现实时缓存更新或删除
- 使用缓存技术提高效率
- 对于提高PHP网站的效率,缓存技术和生成HTML静态页技术哪个更好一些?
- 17个提高PHP编程效率 引入缓存机制提升性能
- [ASP]提高数据显示效率--缓存探幽
- 利用Spring AOP 更新memcached 缓存策略的实现(一)
- 利用spring的拦截器自定义缓存的实现实例代码
- 如何实现缓存系统的更新机制