他山之石之动态加载碎片的最佳写法以及ViewPager关联按钮

 ViewPager的高级使用,以及在viewPager中添加点击事件绑定下面的按钮

1、动态加载碎片(Fragment)的最佳写法,代替普通的replace操作。

2、viewPager的侧滑关联按钮,形成整体关联效果

第一部分:动态加载碎片的最好写法

我们运用碎片的attach和detach方法来实现加载碎片,这样提高程序的运行效率。

大致思路如下:这里有个关键的因素就是FragmentManager,首先是先创建FragmentManager,然后在FragmentManager中将碎片的视图View显示出来。根据这个过程,我们先用FragmentManager判断在布局中的是否有碎片,如果为空才能进行attach和detach的操作,如果为空,我们就可以向其中添加碎片,如果不为空,我们将该碎片detach操作给弄掉;实例代码:


前面的操作保证了在FragmentManager中不存在碎片的情况下,我们在往里面添加碎片。实现代码如下:


这里在向里面添加碎片的同时要注意,如果碎片本身存在的话,就不需要进行add的操作了,因为add的操作本来就是重新创建了一次碎片的过程,那么,我们要重复里利用内存中的碎片资源,就首先判定如果碎片本身存在的话,就向Fragment中进行attach操作,如果为空的话,我们就直接进行add操作,添加碎片。最后不要忘记了提交事物;commit()。这就是加载碎片的最优写法。在这个过程中,我们如果要将点击事件和碎片的加载关联的话,可以另写一个doViewSelect()方法,该方法的作用是碎片提交过后,该按钮是图的显示和碎片的加载达到同步的效果:实现代码如下:



代码的思路是对于一组tab性质的按钮,我们选择其一的话,别的按钮就不能被选择,而且还设置了选择器的功能实现。遍历整个副布局中的子元素,然后将获取到子元素后将对其进行判断和选择。这样就实现了碎片加载和按钮的成功绑定。可以看出来,当我们对一组同样式样的控件进行处理的时候,通常会把它们放在同一个布局当中,便于操作和管理,还可以通过方法对它们和相关的显示绑定起来,达到很好的视觉效果。

第二部分:将ViewPager和按钮进行绑定来对ViewPager进行监听。

用ViewPager实现碎片的左右滑动效果,同时和前面一样,同样可以对这些左右滑动用按钮来绑定:实现的功能如下,用按钮来选择可以实现对碎片的加载,用侧滑也可以对碎片进行加载,这两种加载方式显示出来的效果相互绑定。这里要注意的是导入包的问题,选择v4包中的Fragment,否则会报错。

实现ViewPager侧滑相对容易,选择FragementPagerAdapter这个适配器,关键是如何将图标和碎片的加载顺序进行绑定。首先确定按钮可以加载碎片,这里是在switch和case语句中用viewPager的setCurrentItem()的方法来实现的,该方法主要显示当前是为哪一个碎片,同时用前面的doViewSelect()方法对按钮进行集体显示控制。这里只完成了按钮可以加载,但是我们点击Fragment的碎片视图时候,也可以实现对按钮的加载控制,对viewPager进行监听后,在监听时候的再一次回调doViewSelect方法,这就完成了碎片和控制按钮的耦合。

下面是代码的演示:




下面是自定义适配器,在项目中可以把适配器进行单独的封装,可以分成一个单独的包进行管理。


下面是主界面的布局文件,包含一个ViewPager和一个含有四个TextView的LinerLayout;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在AndroidViewPager可以通过PagerAdapter来动态加载ViewPagerAdapter是一个抽象类,需要实现以下方法: 1. getCount():返回ViewPagerView数量。 2. instantiateItem():创建并返回指定位置的View。 3. destroyItem():销毁指定位置的View。 具体实现步骤如下: 1. 创建一个继承自PagerAdapter的类,实现上述三个方法。 2. 在instantiateItem()方法,根据指定位置创建View,并将其添加到ViewPager。 3. 在destroyItem()方法,将指定位置的ViewViewPager移除。 4. 在使用ViewPager时,将PagerAdapter的实例设置给ViewPager。 示例代码如下: ``` public class MyPagerAdapter extends PagerAdapter { private List<View> mViewList; public MyPagerAdapter(List<View> viewList) { mViewList = viewList; } @Override public int getCount() { return mViewList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = mViewList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { View view = mViewList.get(position); container.removeView(view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } ``` 使用时,可以先创建一个List<View>,然后将需要显示的View添加到List,并将List传入MyPagerAdapter的构造函数。最后将MyPagerAdapter的实例设置给ViewPager即可。 ``` List<View> viewList = new ArrayList<>(); viewList.add(view1); viewList.add(view2); viewList.add(view3); MyPagerAdapter adapter = new MyPagerAdapter(viewList); viewPager.setAdapter(adapter); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值