我有3个导航标签,里面有3个不同的片段。
如何在片段之间添加滑动?
答案 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>
忽略已注释掉的内容。这就是我使用的内容,除了获得我上面所述的库。