ViewPager 配合FragmentPagerAdapter
2016-03-04 22:30
633 查看
原文地址:http://blog.sina.com.cn/s/blog_881875e70101m648.html
先说一段题外话。我们在进行android开发的时候发现,activity是与界面相关的,view及其派生类也是与界面相关的,fragment也是与界面相关的,那他们直接的联系和区别在哪呢。我们知道activity并不直接生成界面,他与view及其派生类关联才能产生界面,acitivity有自己的生命周期,掌管着界面从创建到消亡的过程,用户对应用程序的操作(比如按键,触屏)都要通过acitivity来分发和处理,activity建立view与监听器及之间的关联,从activity的这些作用来看与mvc架构中的c(Controller)作用相似,而view及其派生类当然就是mvc架构中的v。
我们再来看fragment,fragment有自己的生命周期(虽然它的生命周期依赖activity的生命周期),它能够管理属于它自己的view,他有自己的用户交互,这么看它也像是一个mvc中的c,但是它又可以像view一样加入到acitivity的布局中,这又像是一个mvc架构中的v。因此fragment是为了简化actvity与view之间的交互而将activity对用户交互的逻辑模块化进行的封装,它的好处是:1>简化activity的逻辑控制
2>这些模块化的fragment也更利于复用。
Fragment有如下特点:
1>Fragment表现为一个activity用户界面的一部分
2>一个activity可以有多个fragment
3>可以在多个activity中复用fragment
4>fragment有自己的生命周期
5>fragment有自己的事件处理
6>activity运行中,可以添加,移除一个fragment
7>fragment的生命周期有其宿主activity控制
回到正题,ViewPager配合FragmentPagerAdapter如何使用,我们通过下面的例子来说明。
界面布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linear"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</android.support.v4.view.ViewPager>
</LinearLayout>
界面实现:
public class PagerAdapterAndActionBarActivity extends Activity {
ViewPager viewPager;
ActionBar mActionBar;
Fragment1 fragment1;
Fragment2 fragment2;
ArrayList<Fragment> listFragmentsa;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.block_incoming_call_setting);
// 设置viewPager的适配器
listFragmentsa = new ArrayList<Fragment>();
fragment1 = new Fragment1();
fragment2 = new Fragment2();
listFragmentsa.add(fragment1);
listFragmentsa.add(fragment2);
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getFragmentManager(), listFragmentsa);
viewPager = (ViewPager) findViewById(R.id.viewpager1);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.setCurrentItem(0);
// 监听viewPager的变化,ViewPager的变化会同步到ActionBar的tab页
MyOnPageChangeListener myOnPageChangeListener = new MyOnPageChangeListener();
viewPager.setOnPageChangeListener(myOnPageChangeListener);
// 设置ActionBar的tab页,并且ViewPager会随着Tab的选择变化
mActionBar = getActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
MyTabListener myTabListener = new MyTabListener(listFragmentsa);
Tab tab1 = mActionBar.newTab().setText("aaaaaaaa");
Tab tab2 = mActionBar.newTab().setText("bbbbbbbb");
tab1.setTabListener(myTabListener);
tab2.setTabListener(myTabListener);
mActionBar.addTab(tab1);
mActionBar.addTab(tab2);
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> listFragments;
public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> al) {
super(fm);
listFragments = al;
}
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return listFragments.get(position);
}
@Override
public int getCount() {
return listFragments.size();
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}
class MyTabListener implements TabListener {
ArrayList<Fragment> mFragments;
public MyTabListener(ArrayList<Fragment> mFragments) {
super();
this.mFragments = mFragments;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
Log.w("xujinqq", "onPageScrollStateChanged");
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.w("xujinqq", "onPageScrolled");
}
@Override
public void onPageSelected(int arg0) {
Log.w("xujinqq", "onPageSelected" + arg0);
// mActionBar.getTabAt(arg0).select();
mActionBar.setSelectedNavigationItem(arg0);
}
}
}
相关文章推荐
- php、mysql导出excel数据
- php.ini配置说明
- The mbstring extension is missing. Please check your PHP configuration.
- php 依据字符串生成相应数组方法
- PHP中 post 与get的区别 详细说明
- php中使用session避免在刷新页面造成反复提交表单
- erlang访问ftp及sftp
- getAttribute和getParameter的区别
- PHP 错误处理机制
- PHP多进程编程实例
- laravel中间件源码分析
- Vsftpd安装以及配置FTP虚拟用户实践
- Yii命令行模式
- ubuntu下msmtp+mutt的安装和配置
- cgi   fast-cgi  php-cgi  php-fpm理解
- PHP log相关函数
- PHP字符串函数
- PHP empty、isset、isnull的区别
- php 36进制与10进制转换
- PHP 的垃圾收集机制