视图(在本例中,ViewPager)有自己的保存和恢复状态的实现,我依靠它在设备旋转后将ViewPager保持在同一页面上。
当ViewPager在活动中时,它工作得非常好。我滚动到一个页面,旋转设备,它仍然在那个页面上。在SaveInstanceState中不需要任何代码。
我已经把那个活动转化成了一个片段。现在,ViewPager无法保持其状态!如果我滚动到一个页面并旋转设备,它会返回到第1页。
我知道我可以在SaveInstanceState和onCreateView中保存和还原页面,但我宁愿让视图自己来做,尤其是当我添加更多视图时,它会变得更复杂。
我如何用片段恢复视图的功能?
这是我的片段:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Dashboard extends Fragment {
private PagerAdapter pagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pagerAdapter = new PagerAdapter(getChildFragmentManager());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dashboard, container, false);
// irrelevant bits removed
ViewPager pager = (ViewPager) view.findViewById(R.id.dashboard_pager);
pager.setOffscreenPageLimit(3);
pager.setAdapter(pagerAdapter);
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.dashboard_tabs);
tabs.setShouldExpand(true);
tabs.setViewPager(pager);
return view;
}
class PagerAdapter extends FragmentStatePagerAdapter implements PagerSlidingTabStrip.CustomTabProvider {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return Fragment.instantiate(getActivity(), Fragment1.class.getName());
case 1:
return Fragment.instantiate(getActivity(), Fragment2.class.getName());
case 2:
return Fragment.instantiate(getActivity(), Fragment3.class.getName());
}
return null;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "*removed*";
case 1:
return "*removed*";
case 2:
return "*removed*";
}
return null;
}
@Override
public View getCustomTabView(ViewGroup viewGroup, int i) {
return getActivity().getLayoutInflater().inflate(R.layout.tab, viewGroup, false);
}
}
}
你检查过这个答案吗?
如果您发现您的片段在savedinstancestate()中是否仍然有效,您可以避免它。
除此之外,我假设您知道android:confiChange="方向|屏幕大小"
我试图探索Android框架是如何管理碎片的,通过我的研究,我了解了很多关于碎片的新知识,但我有一次陷入了困境,无法理解这是如何发生的。 请先试着理解我的场景。它是这样的:我有一个活动,一个接一个地添加两个片段。首次加载活动时,使用以下代码将片段A附加到该活动: 片段A的这些回调方法在加载时被调用 FirstDummyFragment:onCreate:savedInstanceState---
我有4个按钮来替换活动中的片段[片段A,片段B,片段C,片段D],然后我将片段A替换为活动,然后我将片段A中的值更改为片段A,之后我将片段B替换为片段A,并将片段C替换为片段B.但是我想把片段A替换成片段C。如何在片段A中保存状态。 当我提交片段时编写代码 要替换的图表 片段A ------- 片段B ------- 片段C ------- PS.我不想使用返回按钮返回片段A,我想替换片段A并在第
我有一个HomeActivity,我从中调用片段列表。在HomeActivity中,我有一个侧菜单,其中加载了所有片段。 现在,在这个列表中,我有一个名为HomeFraank的片段,它使用webservice显示带有数据的Google地图。 我想要的是我想加载Map dat只加载一次(第一次)片段,而不是每次单击sidemenu或从任何其他片段进来时。 我的HomeFragment或任何其他片段会
我正在通过片段“A”调用从服务器获取数据。当我用“B”替换“A”时,在从“B”返回到“A”之后,每次都会调用片段“A”,因此每次都会生成HTTPGET。如何避免这种情况,并在活动中重用类似REORDER_to_FRONT的片段? 我正在使用此代码替换为新片段 当我反压时,
我将为我的后期项目创建一个移动的圆圈,圆圈将继续移动,它的内部颜色将像颜色发射一样变化,变化的颜色将在5个级别中从小圆圈到大圆圈,所以如何保持每个颜色的变化保持一段时间,我希望这些代码与线程一起出现,所以我创建了两个线程,一个控制圆圈移动,另一个控制圆圈的内部颜色发射,这里是我的代码:
我有一个单独的活动,它使用了一堆不同的片段。我有一个TabContainer片段,其中包含一个使用ViewPager处理选项卡导航的TabLayout。每个选项卡都是自己的片段。 在我的一个选项卡中,我想点击并在我的选项卡片段顶部放置一个片段。这是一种“详细信息”屏幕,所以我不希望选项卡可见。我正在使用它,它按预期工作: 现在,当我返回时,我的选项卡中的内容是空的。紧邻该选项卡的选项卡中的内容也是