您的位置:首页 > 编程语言 > PHP开发

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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: