ViewPager+Fragment 仅加载当前页面的demo
来源:互联网 发布:mac浏览器自动跳转 编辑:程序博客网 时间:2024/04/29 12:02
通常我们在使用ViewPager 加载 Fragment的时候,ViewPager通常会预加载当前显示界面相邻界面的Fragment,如果我们想显示哪个界面,就加载哪个界面的数据,那应当如何做呢?实现的核心思想就是当前界面的fragment显示给用户的时候,我们就进行数据的加载,没有显示的时候就不进行加载。下面这个demo就实现了这个功能。
简述一下这个demo主要实现了什么,一个ViewPager和5个Fragment的界面,当滑动到哪个页面,哪个页面就将在3秒后将该界面的颜色改变,其他未显示的界面将不产生变化。
首先看下布局文件:
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" ><android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pager" /></RelativeLayout>
主布局就只有一个ViewPager,没有什么可说的
fglayout.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/TestLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/testText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="正在加载中" /></RelativeLayout>5个Fragment的布局,简单的显示了一个TextView,用来标识该页面的加载是否完毕
5个界面的Fragment均用的这个布局,该Fragment的类是TestFragment.java文件,下面我们来看一下这个文件:
public class TestFragment extends Fragment {private TextView textView;private RelativeLayout layout;//定义了一个颜色数组,是第几个页面的Fragment,就用第几个页面的颜色private int[] ColorList = { Color.LTGRAY, Color.BLUE, Color.CYAN,Color.DKGRAY, Color.GREEN };上边的颜色数组就是用来模拟该页面加载完毕的过程,每个页面的显示颜色不同,textView用来显示加载的过程中的提示文字,layout后面作为背景颜色改变的layout
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fglayout, container, false);textView = (TextView) view.findViewById(R.id.testText);layout = (RelativeLayout) view.findViewById(R.id.TestLayout);return view;}下面的方法就是实现的核心,该方法用于告诉我们当前界面的UI对于用户是否可见,如果可见,isVisibleToUser就返回true,我们在这里面首先让textView显示了正在加载的字样,并将背景颜色默认设置成白色,当该界面对用户可见时,让handler发送一条延时的消息(模拟下耗时操作)通知界面将背景颜色改变。
@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {if (textView != null) {textView.setText("正在加载中");layout.setBackgroundColor(Color.WHITE);}if (isVisibleToUser) {handler.sendEmptyMessageDelayed(1, 3000);}super.setUserVisibleHint(isVisibleToUser);}
hander里面的内容:
private Handler handler = new Handler() {@Overridepublic void handleMessage(android.os.Message msg) {if (textView != null) {textView.setText("加载已经完成");layout.setBackgroundColor(ColorList[getArguments().getInt("id")]);}};};
public class MainActivity extends FragmentActivity {private ViewPager pager;private TestFragment[] fgs;private FragmentPagerAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pager = (ViewPager) findViewById(R.id.pager);fgs = new TestFragment[5];for (int i = 0; i < 5; i++) {fgs[i] = new TestFragment();Bundle bundle = new Bundle();bundle.putInt("id", i);fgs[i].setArguments(bundle);}FragmentManager manager = getSupportFragmentManager();adapter = new FragmentPagerAdapter(manager) {@Overridepublic int getCount() {return fgs.length;}@Overridepublic Fragment getItem(int arg0) {return fgs[arg0];}};pager.setAdapter(adapter);pager.setCurrentItem(0);}}
附上源码地址:http://download.csdn.net/detail/tc598100922/7334065
第一次写文章,如果有不足的地方,欢迎指出。 0 0
- ViewPager+Fragment 仅加载当前页面的demo
- FragmentTabHost+Fragment+ViewPager(选中当前页面加载布局。)
- Fragment+viewpager切换滑动页面Demo
- fragment+viewpager第二次加载页面时显示空白的原因!
- 解决Fragment +Viewpager滑动页面重复加载的问题
- 使用viewpager+fragment,在activity启动模式为singleTask,跳转到当前页面重新加载数据fragment数据不更新
- ViewPager+Fragment不预加载页面
- viewpager+fragment的懒加载
- 使用Fragment+ViewPager使用过程中禁止预加载未展示Fragment页面的网络请求
- viewpager+fragment实现的一个小Demo
- 获取ViewPager当前展示的Fragment
- ViewPager获取当前显示的fragment
- 获取当前ViewPager里面的Fragment对象
- 获取ViewPager当前展示的Fragment
- 获取ViewPager当前展示的Fragment
- ViewPager的分页加载功能,即哪一页第一次被选中,这个页面才开始加载当前页面的内容
- android viewpager使用Fragment懒加载,滑到当前fragment才进行数据加载
- 实现ViewPager+Fragment的懒加载功能
- UC技术博客开放通知
- 电商打折促销 ,忽悠 接着忽悠
- Python 安装 MaxMind GeoLite City
- 2014福布斯中国名人榜:范冰冰压刘德华居首
- 算法java实现--贪心算法--最小生成树问题--Prim算法
- ViewPager+Fragment 仅加载当前页面的demo
- 程序员编程艺术学习笔记(三)寻找最小的k个数
- leetcode 刷题指南
- iOS开发和学习中比较好用的学习资料
- 【转】我的成长磨练:每天写博客
- Android的Notification研究
- 网页制作中的CSS+DIV:dl,dt,dd
- 我们不再那么的虚伪
- SQL智能提示工具