Android fragment 切换载入数据卡顿问题
接着上一篇项目的进度。上一篇讲了怎样利用fragment来实现下拉菜单。公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了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;
@Override
public void onClick(View v) {
transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_container, priceFragment);
titleView.setText(priceFragment.getFragmentTitle());
transaction.commit();
popupWindow.dismiss();
}
});
}
上述代码在切换fragment界面的时候,依据fragment的方法api,replace是要又一次生成实例的,这就势必导致数据又一次载入,我们必须得採取隐藏的方式或者加一个进度条来缓解。这里我採用的是fragment提供的hide方法,来实现数据的高速显示,改动代码例如以下:
private void initOpenMenuItem(View popupWindow_view) {
DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view
.findViewById(R.id.menu_price);
menu_price.setOnClickListener(new OnClickListener() {
FragmentTransaction transaction;
@Override
public void onClick(View v) {
transaction = manager.beginTransaction();
/*
* qiulinhe:2015年7月21日10:54:51
* 解决切换卡顿的问题
*/
if (!priceFragment.isAdded()) { // 先推断是否被add过
transaction.hide(openPositionFragment).add(R.id.fragment_container, priceFragment).commit(); // 隐藏当前的fragment。add下一个到Activity中
titleView.setText(priceFragment.getFragmentTitle());
} else {
transaction.hide(openPositionFragment).show(priceFragment).commit(); // 隐藏当前的fragment,显示下一个
titleView.setText(priceFragment.getFragmentTitle());
}</span>
popupWindow.dismiss();
}
});
}
原理就是:
翻看了Android官方Doc。和一些组件的源码。发现,replace()这种方法仅仅是在上一个Fragment不再须要时採用的简便方法。
正确的切换方式是add()。切换时hide()。add()还有一个Fragment。再次切换时,仅仅需hide()当前,show()还有一个。
这样就能做到多个Fragment切换不又一次实例化:
因为是公司项目。不能上传整个project文件,只是能够參考一下我的解决方案,有相同的问题的同学能够交流一下还有没有更优雅的解决的方法。
Android fragment 切换载入数据卡顿问题的更多相关文章
- android viewpager fragment切换时界面卡顿解决办法
目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyI ...
- 4.Android App 优化之消除卡顿
转载:http://gold.xitu.io/post/582583328ac247004f3ab124 1, 感知卡顿 用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI ...
- android 特卖列表倒计时卡顿问题
在Android的开发中,我们经常遇见倒计时的操作,通常使用Timer和Handler共同操作来完成.当然也可以使用Android系统控件CountDownTimer,这里我们封装成一个控件,也方便大 ...
- Android 布局渲染流程与卡顿优化
文章内容概要 一.手机界面UI渲染显示流程 二.16ms原则 三.造成卡顿的原因 四.过度绘制介绍.检测工具.如何避免造成过度绘制造成的卡顿 一.手机界面UI渲染显示流程 大家都知道CPU(中央处理器 ...
- cocos2d-x android黑屏后返回游戏卡顿
转自:http://blog.csdn.net/wolfking_2009/article/details/8824931 2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2. ...
- android异步任务载入数据界面实现
android 异步任务的一个后台方法本质是开启一个线程完毕耗时操作,其它onPostExecute方法和onPreExecute方法执行在UI主线程用于更新UI界面.为了提高用户体验常见的异步任务载 ...
- Android ScrollView嵌套Recyclerview滑动卡顿,松手即停问题解决;
假如你的布局类似这样的: <ScrollView android:layout_width="match_parent" android:layout_height=&quo ...
- android listView 滑动载入数据 该数据是服务端获取的
package com.sunway.works.applycash; import java.util.ArrayList; import java.util.Calendar; import ja ...
- vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡
https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...
随机推荐
- AndroidManifest.xml文件详解(permission-group)
http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...
- shell 指定行插入
#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...
- luogu P1137 旅行计划
题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终 ...
- [BZOJ4004][JLOI2015]装备购买(贪心+线性基)
求最小权极大线性无关组. 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优. 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于 ...
- 【树形dp】The more, The Better
[HDU1561]The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- BZOJ 2296【POJ Challenge】随机种子(构造)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2296 [题目大意] 给出一个数x,求一个10的16次以内的数使得其被x整除并且数字包含 ...
- python 多继承详解
class A(object): # A must be new-style class def __init__(self): print "enter A" print &qu ...
- 对学生排序 Exercise07_17
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:对学生排序 * */ public class Exercise07_17 ...
- HDU 4658 Integer Partition (2013多校6 1004题)
Integer Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 这些年,我们一直追随的.NET
闲来无事,浏览自己的QQ空间,意外发现自己在13年1月份的发在QQ空间写的一片关于技术的随笔,觉得应该将其移到这里: 这些年,我们一直追随的.NET 前两天,意外地看到了.NET平台为异 ...