如何在android中的导航选项卡之间添加滑动?

时间:2014-11-19 16:09:19

标签: android eclipse android-fragments

我有3个导航标签,里面有3个不同的片段。

如何在片段之间添加滑动?

1 个答案:

答案 0 :(得分:1)

Android出于某种原因称为ViewPager!

在你的onCreate方法中,做一下这样的事情:

pager = (ViewPager) findViewById(R.id.pager);
adapter = new MyPagerAdapter(getSupportFragmentManager());

pager.setAdapter(adapter);

然后,

在MainActivity中加入以下内容:

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

    private final String[] TITLES = getResources().getStringArray(R.array.tabs);

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

    @Override
    public int getCount() {
        return TITLES.length;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:  return OneFragment.newInstance(position);
            case 1:  return TwoFragment.newInstance(position);
            case 2:  return ThreeFragment.newInstance(position);
        }

        return null;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }
}

我发布的代码是我使用的代码。它比平常更复杂。它跟踪片段(每个选项卡),允许您从彼此访问片段。因此,如果您在OneFragment中并想要访问TwoFragment,那么您可以执行以下操作:

OneFragment中的

private void getTwoFragmentData() {
    data = (MainActivity) getActivity.getTwoFragmentData();
}
MainActivity中的

public Data getTwoFragmentData() {
    TwoFragment twoFragment = (TwoFragment) adapter.getRegisteredFragment(1);
    return twoFragment.getData();    
}

上面的数据只是一个占位符,但是你可以与它接口,但上面的代码是你如何做的一般结构。

此外,您还可以编辑getItem方法。并相应地制作switch, case

另外,您可以执行pager.setOffScreenPageLimit(x),也可以从当前标签中加载内容x标签,这对于保留信息非常有用。对于3个选项卡,我会使用x = 2,但最终要小心,因为这是额外的内存使用。

最后,最后一点额外的是我使用了一个名为com.astuetz.PagerSlidingTabStrip的库,它非常棒,可以让标签下面的栏与你一起刷,让它看起来很干净。添加它非常简单,您可以找到更多详细信息here

我的activity_main.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<!-- <com.astuetz.PagerSlidingTabStrip -->
<!-- android:id="@+id/tabs" -->
<!-- android:layout_width="match_parent" -->
<!-- android:layout_height="48dip" /> -->

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    <!-- android:layout_below="@+id/tabs" -->
    tools:context=".MainActivity" />

</RelativeLayout>

忽略已注释掉的内容。这就是我使用的内容,除了获得我上面所述的库。