Android中ViewPager和Fragment的使用
小案例
XML中
<android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager>
创建Fragment
fragments=newArrayList<>(); ConversationFragmentfragment1=newConversationFragment(); GroupFragmentfragment2=newGroupFragment(); SearchFragmentfragment3=newSearchFragment(); fragments.add(fragment1); fragments.add(fragment2); fragments.add(fragment3); adapter=newMainPagerAdapter(getSupportFragmentManager(),fragments); viewPager.setAdapter(adapter);
adapter
publicclassMainPagerAdapterextendsFragmentPagerAdapter{
List<Fragment>fragmentList;
publicMainPagerAdapter(FragmentManagerfm,List<Fragment>fragmentList){
super(fm);
this.fragmentList=fragmentList;
}
@Override
publicFragmentgetItem(intposition){
returnfragmentList.get(position);
}
@Override
publicintgetCount(){
returnfragmentList.size();
}
}
OnPageChangeListener
viewPager.addOnPageChangeListener(newViewPager.OnPageChangeListener(){
@Override
publicvoidonPageScrolled(intposition,floatpositionOffset,intpositionOffsetPixels){
intdistance=positionOffsetPixels/3;
//一旦fragment滑动,这里的position实际是前一个的
ViewPropertyAnimator.animate(v_indicate_line).translationX(distance+position*v_indicate_line.getWidth()).setDuration(0);
}
@Override
publicvoidonPageSelected(intposition){
textLightAndSize();
}
@Override
publicvoidonPageScrollStateChanged(intstate){
}
});
配合其他点击事件
//这里是注意setCurrentItem的用法
switch(view.getId()){
caseR.id.ly_conversation:
viewPager.setCurrentItem(0);
break;
caseR.id.ly_group:
viewPager.setCurrentItem(1);
break;
caseR.id.ly_search:
viewPager.setCurrentItem(2);
break;
}
官方案例
R.layout.fragment_pager
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:padding="4dip" android:gravity="center_horizontal" android:layout_width="match_parent"android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1"> </android.support.v4.view.ViewPager> <LinearLayoutandroid:orientation="horizontal" android:gravity="center"android:measureWithLargestChild="true" android:layout_width="match_parent"android:layout_height="wrap_content" android:layout_weight="0"> <Buttonandroid:id="@+id/goto_first" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/first"> </Button> <Buttonandroid:id="@+id/goto_last" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/last"> </Button> </LinearLayout> </LinearLayout>
R.layout.fragment_pager_list
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:drawable/gallery_thumb"> <TextViewandroid:id="@+id/text" android:layout_width="match_parent"android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/hello_world"/> <!--Theframelayoutisheresincewewillbeshowingeither theemptyvieworthelistview.--> <FrameLayout android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"> <!--Hereisthelist.SinceweareusingaListActivity,we havetocallit"@android:id/list"soListActivitywill findit--> <ListViewandroid:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false"/> <!--Hereistheviewtoshowifthelistisemtpy--> <TextViewandroid:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Noitems."/> </FrameLayout> </LinearLayout>
publicclassFragmentPagerSupportextendsFragmentActivity{
staticfinalintNUM_ITEMS=10;
MyAdaptermAdapter;
ViewPagermPager;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter=newMyAdapter(getSupportFragmentManager());
mPager=(ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
//Watchforbuttonclicks.
Buttonbutton=(Button)findViewById(R.id.goto_first);
button.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
mPager.setCurrentItem(0);
}
});
button=(Button)findViewById(R.id.goto_last);
button.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
mPager.setCurrentItem(NUM_ITEMS-1);
}
});
}
publicstaticclassMyAdapterextendsFragmentPagerAdapter{
publicMyAdapter(FragmentManagerfm){
super(fm);
}
@Override
publicintgetCount(){
returnNUM_ITEMS;
}
@Override
publicFragmentgetItem(intposition){
returnArrayListFragment.newInstance(position);
}
}
publicstaticclassArrayListFragmentextendsListFragment{
intmNum;
/**
*CreateanewinstanceofCountingFragment,providing"num"
*asanargument.
*/
staticArrayListFragmentnewInstance(intnum){
ArrayListFragmentf=newArrayListFragment();
//Supplynuminputasanargument.
Bundleargs=newBundle();
args.putInt("num",num);
f.setArguments(args);
returnf;
}
/**
*Whencreating,retrievethisinstance'snumberfromitsarguments.
*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
mNum=getArguments()!=null?getArguments().getInt("num"):1;
}
/**
*TheFragment'sUIisjustasimpletextviewshowingits
*instancenumber.
*/
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
Viewv=inflater.inflate(R.layout.fragment_pager_list,container,false);
Viewtv=v.findViewById(R.id.text);
((TextView)tv).setText("Fragment#"+mNum);
returnv;
}
@Override
publicvoidonActivityCreated(BundlesavedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(newArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1,Cheeses.sCheeseStrings));
}
@Override
publicvoidonListItemClick(ListViewl,Viewv,intposition,longid){
Log.i("FragmentList","Itemclicked:"+id);
}
}
}
注意
3.0之前的Activity是不能用fragment的。为了能使用fragment(supportV4中),才有了FragmentActivity。FragmentActivity继承的Activity。
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。