Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览



Android技术——切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi


一、早期android(android.support.v4)提供了一系列支持Fragment滑动切换的类。主要是:

1、ViewPager:它时Fragment容器,能够同一时候管理多个Fragment,并同意多个Fragment切换时提供动画效果。

2、FragmentPagerAdapter:Adapter类。用于为ViewPager提供多个Fragment。此类通常须要扩展。

3、PagerTitleStrip:与ViewPager结合使用,用于在ViewPager上显示“导航条”。

二、借助ViewPage实现Tab滑动导航的过程例如以下:

step1:扩展得到自己的FragmentPagerAdapter

step2:扩展得到自己的SimpleOnPageChangeListener。这个主要时在ViewPager滑动选择时候被触发。因此在这里面一般是放置切换Fragment的代码。

step3:向ViewPager加入自己的FragmentPagerAdapter和自己的SimpleOnPageChangeListener。

示比例如以下:

(本项目是在上文“Android技术——滑动切换(一)实现Tab导航”项目基础上加入而来)

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MeiNvFragment_V4.java文件(事实上这个类和上文中的MeiNvFragment的内容一模一样。仅仅是MeiNvFragment_V4是继承自android.support.v4.app.Fragment而已)

package com.example.tab_nav;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MeiNvFragment_V4 extends Fragment
{
    public static int[]  img_ids;
    public static String Fragment_Key = "Fragment_Key";
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View v = inflater.inflate(R.layout.fragment_layout, null);
        ImageView img_meinv = (ImageView) v.findViewById(R.id.img_meinv);
        // 获取创建该Fragment时传入的參数Bundle
        Bundle args = getArguments();
        img_meinv.setImageResource(img_ids[args.getInt(Fragment_Key)]);
        return v;
    }
}

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/ViewPagerActivity.java文件:

package com.example.tab_nav;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
public class ViewPagerActivity extends FragmentActivity
// 因为FragmentPagerAdapter仅仅在android.support.v4中定义
// 而android.support.v4.app.FragmentActivity的实例化须要传入android.support.v4.app.FragmentManager。
// 这个特殊的FragmentManager仅仅能通过FragmentActivity的getSupportFragmentManager方法得到,
// 所以ViewPagerActivity必须继承android.support.v4.app.FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager);
        MeiNvFragment_V4.img_ids = new int[] { R.drawable.linzhiling,
                R.drawable.liuyan, R.drawable.yangmi };
        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        // 为ViewPager加入FragmentPagerAdapter
        myFragmentPagerAdapter adapter = new myFragmentPagerAdapter(
                getSupportFragmentManager());
        pager.setAdapter(adapter);
        // 为ViewPager加入事件监听器
        mySimpleOnPageChangeListener listener = new mySimpleOnPageChangeListener(
                pager);
        pager.setOnPageChangeListener(listener);
    }
    // 扩展得到自己的FragmentPagerAdapter
    class myFragmentPagerAdapter extends FragmentPagerAdapter
    {
        public myFragmentPagerAdapter(FragmentManager fm)
        {
            super(fm);
            // TODO Auto-generated constructor stub
        }
        // 获取指定位置的Fragment
        @Override
        public Fragment getItem(int arg0)
        {
            Fragment f = new MeiNvFragment_V4();
            Bundle b = new Bundle();
            b.putInt(MeiNvFragment.Fragment_Key, arg0);
            f.setArguments(b);
            return f;
        }
        // 指出该Adapter包括Fragment的数目
        @Override
        public int getCount()
        {
            // TODO Auto-generated method stub
            return MeiNvFragment_V4.img_ids.length;
        }
        @Override
        public CharSequence getPageTitle(int position)
        {
            return "第" + (position + 1) + "个美女";
        }
    }
    // 扩展得到自己的SimpleOnPageChangeListener
    class mySimpleOnPageChangeListener extends SimpleOnPageChangeListener
    {
        private ViewPager pager;
        public mySimpleOnPageChangeListener(ViewPager p)
        {
            pager = p;
        }
        public void onPageSelected(int position)
        {
            pager.setCurrentItem(position);
        }
    }
}
/MeiNv_Liulanqi/res/layout/activity_view_pager.xml文件:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <android.support.v4.view.PagerTitleStrip
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top" >
    </android.support.v4.view.PagerTitleStrip>
</android.support.v4.view.ViewPager>
启动ViewPagerActivity 后的效果:


正在从第一个美女向第二个美女滑动中。


版权声明:本文博主原创文章。博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/zfyouxi/p/4850085.html