Android ViewPager分頁+fragment功能
阿新 • • 發佈:2019-01-05
仿照Android4.0撥號介面實現分頁的介面,如下:
1、ViewPager是安卓的擴充套件包,可以從原始碼out/target/common/obj/JAVA_LIBRARIES/android-support-v13-intermediates/classes.jar拷貝,注意是android-support-V13而不是android-support-v4,因為Activity中getFragmentManager()返回的android.app.FragmentManager物件,而v4中FragmentAdapter的建構函式引數型別android.v4.Fragmentmanager,所以你懂的,不相容,而v13完美相容。
2、main.xml佈局如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/acti_frame">
- <!-- 此處需要給出全路徑-->
- <android.support.v4.view.ViewPager
- android:id="@+id/viewpagerLayout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- </LinearLayout>
ps:ViewPager加上全路徑
3、自定義3個Fragment,Fragment在3.0推出,作用很多,使用方法推薦一個帖子
【eoeandroid索引】android fragment知識彙總
http://www.eoeandroid.com/thread-172624-1-1.html
Fragment的實現如下:
- publicclass Fragment1 extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View root = inflater.inflate(R.layout.fragmentlayout1, container, false);
- return root;
- }
- }
其中動態載入的佈局fragmentlayout.xml如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextViewandroid:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="fragmentlayout1"
- android:textSize="22sp"
- android:gravity="center"
- />
- </LinearLayout>
Fragment2和Fragment3的實現和1雷同,就不貼出來了
4、Activity中使用ViewPager和Fragment,程式碼如下:
- publicclass FragmentViewPagerTestActivity extends Activity {
- privatefinalstatic String TAG = "FragmentViewPagerTestActivity";
- privatefinal PageChangeListener mPageChangeListener = new PageChangeListener();
- private ViewPager vp = null;
- privatefinalint TAB_INDEX1 = 0;
- privatefinalint TAB_INDEX2 = 1;
- privatefinalint TAB_INDEX3 = 2;
- privatefinalint TAB_INDEX_COUNT = 3;
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findView();
- initView();
- vp.setOnPageChangeListener(mPageChangeListener);
- setupFragment1Tab();
- setupFragment2Tab();
- setupFragment3Tab();
- getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- getActionBar().setDisplayShowTitleEnabled(false);
- getActionBar().setDisplayShowHomeEnabled(false);
- }
- privateclass PageChangeListener implements OnPageChangeListener {
- privateint mCurrentPosition = -1;
- privateint mNextPosition = -1;
- @Override
- publicvoid onPageScrollStateChanged(int arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- publicvoid onPageScrolled(int arg0, float arg1, int arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- publicvoid onPageSelected(int arg0) {
- final ActionBar actionBar = getActionBar();
- if(mCurrentPosition == arg0) {
- Log.e(TAG , "Previous posion and next position is same");
- }
- actionBar.selectTab(actionBar.getTabAt(arg0));
- mNextPosition = arg0;
- }
- publicvoid setCurrentPosition(int position) {
- mCurrentPosition = position;
- }
- }
- private TabListener mTabListener = new TabListener() {
- @Override
- publicvoid onTabReselected(Tab tab, FragmentTransaction ft) {
- }
- @Override
- publicvoid onTabSelected(Tab tab, FragmentTransaction ft) {
- if(vp.getCurrentItem() != tab.getPosition()) {
- vp.setCurrentItem(tab.getPosition(),true);
- }
- }
- @Override
- publicvoid onTabUnselected(Tab tab, FragmentTransaction ft) {
- }
- };
- privatevoid setupFragment1Tab() {
- Tab tab = getActionBar().newTab();
- tab.setText("Fragment1");
- tab.setTabListener(mTabListener);
- getActionBar().addTab(tab);
- }
- privatevoid setupFragment2Tab() {
- Tab tab = getActionBar().newTab();
- tab.setText("Fragment2");
- tab.setTabListener(mTabListener);
- getActionBar().addTab(tab);
- }
- privatevoid setupFragment3Tab() {
- Tab tab = getActionBar().newTab();
- tab.setText("Fragment3");
- tab.setTabListener(mTabListener);
- getActionBar().addTab(tab);
- }
- privatevoid findView() {
- vp = (ViewPager) findViewById(R.id.viewpagerLayout);
- }
- privatevoid initView() {
- android.app.FragmentManager fm = getFragmentManager();
- vp.setAdapter(new MyViewPagerAdapter(fm));
- }
- publicclass MyViewPagerAdapter extends FragmentPagerAdapter {
- public MyViewPagerAdapter(FragmentManager fm) {
- super(fm);
- }
- @Override
- public Fragment getItem(int arg0) {
- switch(arg0) {
- case TAB_INDEX1:
- returnnew Fragment1();
- case TAB_INDEX2:
- returnnew Fragment2();
- case TAB_INDEX3:
- returnnew Fragment3();
- }
- returnnull;
- }
- @Override
- publicint getCount() {
- return TAB_INDEX_COUNT;
- }
- }
- }
PS:getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);指定定位模式為TABs,不能少;
轉自:http://blog.csdn.net/aiai373824745/article/details/7619054點選開啟連結