如何在Fragment选项卡中实现滑动功能?**不是TAB + SWIPE**

Sui*_*eep 2 android android-fragments

我对Android环境很新,所以这个问题对你们有些人来说可能很简单.请尽量不要对我太苛刻.谢谢.

按照本网站上的教程:http://www.linux.com/learn/tutorials/761642-android-app-development-for-beginners-navigation-with-tabs,我已经成功创建了一个应用程序,有三个选项卡拥有它自己的layout.

然后我找到了另一个教程ViewPager:http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/

我正在尝试将这两个应用程序组合成一个,这意味着将其ViewPager放入我的tab3.

如链接所示,tab3需要setTabListener并期望Fragment类如下:

ActionBar.Tab tab3;
Fragment fragmentTab3 = new FragmentTab3();

ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


tab3.setTabListener(new MyTabListener(fragmentTab3));
actionBar.addTab(tab3);
Run Code Online (Sandbox Code Playgroud)

我完全没有关于如何修改代码的线索,因此它接受了一个扩展的类,PagerAdapter并允许tab3作为一个ViewPager

pra*_*tsJ 5

我已经构建了一个类似的应用程序,其中所有三个选项卡都包含其中的查看器.

选项卡实现与您提到的相同:

final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);
    setContentView(R.layout.activity_main);

    actionBar.addTab(actionBar.newTab().setIcon(R.drawable.ic_action_file)
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setIcon(R.drawable.ic_action_music)
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setIcon(R.drawable.ic_action_video)
            .setTabListener(this));
Run Code Online (Sandbox Code Playgroud)

将片段分配给各个标签,如下所示:

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    Fragment mFragment;
    Log.d(TAG, "Inside on tab selected");
    switch (tab.getPosition()) {
    case 0:
        mFragment = Fragment1.newInstance(null);
        ft.replace(R.id.content, mFragment, "fragment1");
        break;

    case 1:
        mFragment = Fragment2.newInstance();
        ft.replace(R.id.content, mFragment, "fragment2");
        break;

    case 2:
        mFragment = Fragment3.newInstance();
        ft.replace(R.id.content, mFragment, "fragment3");
        break;
    default:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在fragment3不需要扩展pageradapter.第3个片段的内部布局,添加一个viewpager

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_music_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/colorBackground"
tools:context="com.gridants.cubeit.ui.MusicFragment" >
    <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:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:paddingBottom="4dp"
            android:paddingTop="4dp"
            android:textColor="#fff" />
    </android.support.v4.view.ViewPager>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

在fragment3代码中,声明viewpager和自定义fragmentStatePagerAdapter

    mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(
            getChildFragmentManager());
    mViewPager = (ViewPager) view.findViewById(R.id.pager);
    mViewPager.setAdapter(mDemoCollectionPagerAdapter);
Run Code Online (Sandbox Code Playgroud)

以下是实现自定义适配器的示例代码

    public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
    private final FragmentManager mFragmentManager;
    public Fragment mFragmentAtPos0;
    private Context context;

    public DemoCollectionPagerAdapter(FragmentManager fm) {
        super(fm);
        mFragmentManager = fm;
    }

    @Override
    public Fragment getItem(int i) {
        Fragment mFragment;
        Bundle args;
        Log.d(TAG, "Inside on tab selected");
        switch (i) {
        case 0:
            mFragment = new InnerFragment1();
            break;

        case 1:
            mFragment = new InnerFragment2();
            break;

        case 2:
            mFragment = new InnerFragment3();
            break;
        }
        return mFragment;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title;
        switch (position) {
        case 0:
            title = "OBJECT " + (position + 1);
            break;

        case 1:
            title = "OBJECT " + (position + 1);
            break;

        default:
            title = "OBJECT " + (position + 1);
            break;
        }
        return title;
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.