这让我很头疼。假设我的应用有ViewPager
,其中包含4个标签。我想在每个选项卡中有多个子片段。这意味着每个选项卡只有一个视图。我完全不知道如何实现这个目标....
我有FragmentActivity
首先加载并设置ViewPager
public class FragActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frag_main);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
PagerAdapter adapter = new FFNPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(3);
tabs.setViewPager(pager);
}
}
然后我有FragmentPagerAdapter
public class PagerAdapter extends FragmentPagerAdapter implements TextAndIconTabProvider {
private final String[] TITLES = { "FIRST", "SECOND", "THIRD", "FORTH" };
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment frag = new Fragment();
switch (position) {
case 1:
frag = new FirstFrag();
break;
case 2:
frag = new SecondFrag();
break;
case 3:
frag = new ThirdFrag();
break;
case 4:
frag = new ForthFrag();
break;
}
return frag;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return TITLES.length;
}
}
上面的内容会给我一个有效的ViewPager
个活动标签。然后我需要做所有4个单独的碎片。我在下面给出一个例子。
public class FirstFrag extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.firstfrag, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Button btn1 = (Button) getActivity().findViewById(R.id.btn1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// what should I put in this block??????
Fragment fragment = new FirstFragSub1();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.pager, fragment); //<<------what should i replace???????
transaction.commitAllowingStateLoss();
}
});
}
}
OnCreateView
中的FirstFragSub1
被调用,但我看不到屏幕上显示的内容。基本上只是一片空白。我知道通过替换R.id.pager
不应该是正确的方法,我只是举出一个我最初的想法的例子。
这是我的FirstFragSub1
public class FirstFragSub1 extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.i("FirstFragSub1","onCreateView is called");
return inflater.inflate(R.layout.subone, container, false);
}
}
有人可以帮帮我吗?我真的没有想法......谢谢
答案 0 :(得分:0)
这里有一个很棒的教程和github,详细介绍了这一点。
http://tausiq.wordpress.com/2014/06/06/android-multiple-fragments-stack-in-each-viewpager-tab/ https://github.com/tausiq/ViewPagerMultipleFragmentDemo
这包括处理backstack和多个选项卡,每个选项卡有多个视图。希望这个帮助我在阅读你的问题时正在寻找类似的解决方案。
答案 1 :(得分:0)
在Fragment正在膨胀的视图中有FrameLayouts。在onCreateView上,用你想要的子片段替换FrameLayout。
另外,请注意不要使用Activity的FragmentManager。 getFragmentManager返回Activity的FragmentManager,这将导致不良结果(ViewPager中只有一个片段会加载子片段)。请改用getChildFragmentManager功能。