原文地址: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。
1>Fragment表现为一个activity用户界面的一部分
2>一个activity可以有多个fragment
3>可以在多个activity中复用fragment
4>fragment有自己的生命周期
5>fragment有自己的事件处理
6>activity运行中,可以添加,移除一个fragment
7>fragment的生命周期有其宿主activity控制
界面布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
</LinearLayout>
界面实现:
public class PagerAdapterAndActionBar Activity 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.setSelectedNavigationIte m(arg0);
}
}
}