根据您的解释,我实施以下内容:
1-在您的活动中创建您的Tabs
and ViewPager
:
mPager = (ViewPager) findViewById(R.id.vp_pager);
mPager.setOffscreenPageLimit(3);
PagerAdapter mAdapter = new PagerAdapter(getSupportFragmentManager(), getContext());
mPager.setAdapter(mAdapter);
//tab.setupWithViewPager(mPager);
2-在每个选项卡中创建ViewPager
(我假设你想要里面的标签tabs
如果您不需要选项卡,只需将其删除),每个的实现fragment
会是这样的:
ViewPager mPager = (ViewPager) rootView.findViewById(R.id.vp_pager);
mPager.setOffscreenPageLimit(3);
CategoryAdapter mAdapter = new CategoryAdapter(getChildFragmentManager());//make sure this ChildFragmentManager
mPager.setAdapter(mAdapter);
另外,在片段中创建一个按钮,当单击时该按钮会转到另一个片段:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPager.setCurrentItem(1); // go to second fragment
}
});
最终结果将类似于以下内容,如果您转到Home选项卡,然后返回Category标签你是你的Fragment
位置没有改变。
您应该记住两点:
- set
mPager.setOffscreenPageLimit(3);
如果你不想破坏你的片段
- 在内部片段传递中
getChildFragmentManager()
代替FragmentManager()
如果你不需要内ViewPager
您只想一次加载一个 Fragment 实例,这是另一种选择:
1- 执行之前方法的第一项。
2-在您的片段 xml 中放置 FrameContainer 并在其中加载您的片段:
CategoryResultFragment f = CategoryResultFragment.newInstance();
getFragmentManager().beginTransaction()
.replace(R.id.frame_result_container, f)
.commit();
Edit:这不是最好的方法,但我认为可以解决您的问题:
1-在您的中创建一个静态字段MainActivity
像下面这样:
static String[] type = new String[3];
2-当您在片段中调用 onClick 时,更新String
你的价值MainActivity
.
public static update currentType(int pos,String type);
第一个值是 ViewPager 位置,第二个值是您的内部 Fragment 类型(例如:fragment_d);
3-在你的ViewPager中
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: // first tab
if(type[position] == "fragment_d")
return new Fragment_D();
else
return new Fragment_B();
}
}