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框架 ...
随机推荐
- PHP通过mysqli连接mysql数据库
数据库连接的天龙八步: 1.连接数据库 连接:mysqli_connect 2.成功与否判断 连接错误号:mysqli_connect_errno 连接错误信息:mysqli_connect_erro ...
- Codeforces 1082 A. Vasya and Book-题意 (Educational Codeforces Round 55 (Rated for Div. 2))
A. Vasya and Book time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 洛谷——P1630 求和
P1630 求和 题目描述 求1^b+2^b+……+a^b的和除以10000的余数. 输入输出格式 输入格式: 第一行包含一个正整数N,表示共有N组测试数据: 接下来N行,每行包含两个正整数a和b. ...
- Sqli-labs less 8
Less-8 经过简单的测试,我们发现 'or 1=1--+返回正常,那么我们就基本知道应该怎么使用了,参考less5.这里简单的进行一个示例: http://127.0.0.1/sqllib/Les ...
- Linux命令之ping
ping [选项] destination ping命令向网络主机发送ICMP回传请求 详细描述:ping使用ICMP协议强制ECHO_REQUEST(回传请求)数据报从主机或网关获取ICMP协议的E ...
- phonegap3.5插件开发小demo
由于phonegap升级较快,在3.X之后改变了它的插件机制,所有调用手机原生的功能全部以外部插件的形式提供,创建phonegap项目之后不再能够直接调用系统功能API如camera,device等, ...
- D - Matrix Multiplication ZOJ - 2316 规律题
Let us consider undirected graph G = which has N vertices and M edges. Incidence matrix of this grap ...
- 杀掉lampp进程
#!/bin/sh pid='ps -ef|grep lampp|grep -v grep|awk '{ print $2 }'' echo $pid exit if[ $pid ] then for ...
- [P2698][USACO12MAR]花盆Flowerpot
Link: P2698 传送门 Solution: 对于可行区间$[L,R]$,随着$L$的递增$R$不会递减 因此可以使用尺取法来解决此题:不断向右移动左右指针,复杂度保持线性 同时为了维护区间内的 ...
- BZOJ 3524 [Poi2014]Couriers(二分+蒙特卡罗)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...