接上一篇的博文:Android fragment 切换载入数据卡顿问题。想到的办法就是把切换之前的fragmenthide隐藏起来。就能够解决卡顿的问题,不用又一次new一个fragment。因为左側悬浮菜单有几乎相同10多个菜单,假设每个菜单切换的时候,都要隐藏其余全部的菜单,那就会导致代码十分的臃肿,曾经隐藏的代码是这种:

              /*if (!openPositionFragment.isAdded()) { // 先推断是否被add过transaction.hide(priceFragment).add(R.id.fragment_container, openPositionFragment).commit(); // 隐藏当前的fragment。add下一个到Activity中titleView.setText(openPositionFragment.getFragmentTitle());} else {transaction.hide(priceFragment).show(openPositionFragment).commit(); // 隐藏当前的fragment,显示下一个titleView.setText(openPositionFragment.getFragmentTitle());}*/

每个菜单button下的点击事件,都要写一段这种代码,并且局限是仅仅能隐藏一个。导致切换的时候有重叠问题,无法正确显示。

解决的方案是:

先隐藏全部的fragment,然后进入点击事件,假设该fragment已经实例化,那就show就好,假设没有还未实例化,那就先new一个,然后show,最后一定记得commit。我就是因为没写这句代码导致空指针异常。

另一点注意的是必须先实例化你第一个进入的fragment。

改动之后的代码例如以下:

private void initOpenMenuItem(View popupWindow_view) {DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view.findViewById(R.id.menu_price);menu_price.setOnClickListener(new OnClickListener() {FragmentTransaction transaction;@Overridepublic void onClick(View v) {progressDialog.show();transaction = manager.beginTransaction();hideFragments(transaction);/** qiulinhe:2015年7月21日10:54:51 解决切换卡顿的问题*/if (priceFragment == null) {  // 假设MessageFragment为空,则创建一个并加入到界面上  priceFragment = new PriceFragment();  transaction.add(R.id.fragment_container, priceFragment);  titleView.setText(priceFragment.getFragmentTitle());} else {  // 假设MessageFragment不为空,则直接将它显示出来  transaction.show(priceFragment); titleView.setText(priceFragment.getFragmentTitle());}transaction.commit();popupWindow.dismiss();progressDialog.dismiss();}});}/** * 将全部的Fragment都置为隐藏状态。 *  * @param transaction *            用于对Fragment运行操作的事务 */  private void hideFragments(FragmentTransaction transaction) {  if (priceFragment != null) {  transaction.hide(priceFragment);  }  if (openPositionFragment != null) {  transaction.hide(openPositionFragment);  }  if (closeHisFragment != null) {  transaction.hide(closeHisFragment);  }  if (orderHisFragment != null) {  transaction.hide(orderHisFragment);  }  }

这样就能够解决fragment切换重叠,无法正常显示的问题。

只是这里提一个问题,就是hide方法运行之后,被隐藏的fragment。假设后台在获取数据。刷新界面,是否会导致数据太多,程序崩溃的问题?

经过后台打印的时候,的确显示的当前fragment更新数据。但那些隐藏的fragment仍然在后台执行,这势必导致内存越来越被占用。

   怎样解决?

2015年8月14日10:23:44:今天最终找到了解决方式:

之前监听数据变化。是依据数据变化的监听器变化,发送了一个事件,fragment接收到了之后,又一次绑定数据源。载入数据。更新listview列表项。我的处理方法非常笨:定义了一个map,存放每一个行的数据。当数据以来。我就map.removeall(map),然后又一次载入整个列表项。一開始数据少。更新慢。不会影响长按操作,后期測试的时候。数据变化非常快。就导致了长按button无法正常使用的问题。

同事提供了一个非常好的解决方式就是:推断数据源里的数据和如今展示出来的列表数据,哪些是发生了变化。这样仅仅更新变化的几个字段。就不会导致又一次载入之后。数据刷新太快,导致长按无法使用。

@Override
public void onTradeChanged(Long ticket) {
isHidden();
// 假设交易發生變化,則從新獲取開倉數據
System.out.println(ticket + " ===== ");
if (!isHidden()) {  //这个就是fragment就是推断当前fragment是否隐藏,假设已经隐藏了。就不在后台更新数据,不接受更新
onTradeDataChange(ticket);
}
}


=========================更新时间2016年2月26日11:00:25:添加怎样更新map中的部分数据,避免先所有删除map的数据,代码例如以下:

 // private void onTradeDataChange() {updateTableData();fireTableDataChange();}public void fireTableDataChange() {getHandler().post(new Runnable() {@Overridepublic void run() {// tableAdapter.notifyDataSetInvalidated();if (tableAdapter != null) {tableAdapter.notifyDataSetChanged();}}});}/*** * @Title:?updateTableData* @Description:?

数据發生變化 * @param? * @return?void * @throws?

? */ private void updateTableData() { dataMap.clear(); TTrade[] tradeVec = getTradeVec(); for (TTrade trade : tradeVec) { // if (!isExsitsTicketSplitno(trade)) { HashMap<String, Object> rowData = addTradeNode(trade); dataMap.add(rowData); // } else { // HashMap<String, Object> rowData = removeOpenPosition(trade); // if (rowData != null) { // dataMap.remove(rowData); // } // } } // 依照系统设置传递过来的数据进行排序 sortOrderHisByAll(oppsortInt); } /** * * @Title:?updateTableData * @Description:?来数据时,更新 * @param?@param instrumentName * @return?void * @throws??

*/ private void updateTableData(String instrumentName) { for (HashMap<String, Object> rowData : dataMap) { String instName = rowData.get(Instrument).toString(); if (instrumentName.equalsIgnoreCase(instName)) { long ticket = Long.parseLong(rowData.get(Ticket).toString()); TTrade trade = APIDoc.getUserDocCaptain().getTrade(ticket); if (trade != null) { rowData.put(FloatPL, trade.get_floatPL()); rowData.put(MktPrice, trade.get_marketPrice()); } } } }

转载于:https://www.cnblogs.com/jzdwajue/p/7142346.html

Android Fragment 切换多个界面 重叠问题 隐藏问题相关推荐

  1. Android Fragment切换动画(滑入滑出)

    之前写过一篇Activity切换动画的文章Activity切换动画(滑入滑出) 本文还采用滑入滑出的方式,贴一下Fragment之间切换动画的实现,Fragment比Activity需要多考虑一点 a ...

  2. Android Activity内嵌Fragment,当Activity recreate时Fragment被添加多次,造成界面重叠

    由于某些原因,例如旋转屏幕,内存不足时,造成Activity被destroy() ,或者切换语言环境时,我们recreate()该Activity.这时,如果在该Activity的onCreate中未 ...

  3. 【Android】保存Fragment切换状态

    [Android]保存Fragment切换状态 前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法. 声明 欢迎转载,但请保留文章 ...

  4. android 百度定位开启后fragment 不显示,解决Android百度地图MapView在ViewPager中Fragment切换黑屏问题...

    百度地图切换界面出现黑屏原因是地图退出释放内存时渲染出现bug导致.因为是百度地图本身内部bug.所以我们无法从本质上去修复这个bug android:id="@ id/dynamics_m ...

  5. android fragment实例化,Android使得Fragment 切换时不重新实例化

    以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...

  6. Android肝帝战纪之基于上篇单Activity+多Fragment框架,开发电商式导航栏,多Fragment切换

    电商式导航栏,多Fragment切换 本文默认在已经搭建好的框架上进行开发 点此链接到上一篇基础框架的搭建 界面构思示意图 设计思路 在底部的LinearLayout中添加相应的图标,然后设置tag绑 ...

  7. Android Activity中实现Fragment切换功能效果

    一个最简单的Activity中实现Fragment切换功能效果: 一.效果图: 二.快速实现: 一个Activity中添加多个Fragment进行切换实现相应的功能需求逻辑,比如在activity中有 ...

  8. Android移动应用开发之Viewpage2+fragment实现微信滑动界面的效果

    文章目录 布局 viewpager2 fragment adapter 实现的效果如下: 滑动界面能够实现界面的跳转. 点击下面按钮同样实现界面的跳转. 布局 最下面的导航栏,单独写了个布局文件: & ...

  9. Android 用显示隐藏完成fragment切换

    实现fragment的方法有很多,例如FragmentTabHost,replace,实现fragment切换,今天我为大家介绍一个显示隐藏的方法. 这个就是实现显示隐藏的运行类,简单方便,不会出现切 ...

  10. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...

最新文章

  1. 【Quartz】插件的使用
  2. java switch中if_详解java中if语句和switch的使用
  3. 一套解决方案,多个项目
  4. 为什么要有事件循环机制(Event Loop)
  5. 网页设计作业作品成品HTML5+CSS大作业——简单的程序员个人博客(7页) 大学个人博客网页制作教程 表格布局网页模板
  6. 关于数学建模竞赛经历
  7. 什么是双线性映射(Bilinear Mapping )?
  8. win10系统安装软件双击无反应
  9. keil4 mdk安装教程
  10. UPDATE的两个实例
  11. 电脑鼠标左键按下去没反应怎么办
  12. win10注册mysql服务_win10下搭建MySQL服务
  13. 自媒体内容泛滥,同质化严重!用户已审美疲劳
  14. android梅花形布局,技法介绍——画梅花时的布局
  15. Android KitCat 4.4.2 ADB 官方所支持的所有Services格式翻译
  16. 应用宝省流量更新sdk接入指南
  17. HowTo如何制作一个文字冒险游戏-里篇(1)
  18. Java实现 LeetCode 507 完美数
  19. VSM测试粉末样品制样
  20. 计算机考研数据结构考试大纲,2017考研大纲:计算机考研大纲文字版之数据结构...

热门文章

  1. asp 基础操作之增删改查
  2. 使用layui实现后台数据表格显示时的需要修改的地方(包括后台)
  3. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署nacos-sentinel-rocketmq-zipkin-elasticsearch等等 一键部署 即开即用服务
  4. 阶段3 1.Mybatis_11.Mybatis的缓存_2 延迟加载和立即加载的概念
  5. 【转载】【SQL】Sql Server Management Studio 18 打开闪退问题
  6. Mysql查询性能优化
  7. Python学习笔记008_类_对象_继承_组合_类相关的BIF
  8. 文件的HANDLE转化为FILE*!!!
  9. idea如何一个项目如何运行多个实例
  10. BZOJ4355: Play with sequence(吉司机线段树)