(我想出了一个解决方案 - 请在下面的答案部分看到我的帖子.)
在我的应用程序中,用户将从他的数据的单个视图开始.我想添加一个ViewPager,并允许用户根据需要添加更多视图.我该怎么做呢?(我不想使用FragmentPagerAdapter.)
我已经阅读了无数的帖子和概述,但我仍然遗漏了一些东西.这是我认为我理解的:
MainActivity创建一个ViewPager和PagerAdapter:
ViewPager pager = null;
MainPagerAdapter adapter = null;
public void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
pager = new ViewPager (this);
setContentView (pager);
adapter = new MainPagerAdapter();
pager.setAdapter (adapter);
View v0 = code_to_create_initial_view();
adapter.add (v0, 0);
}
Run Code Online (Sandbox Code Playgroud)
使用PagerAdapter提供视图集.为此,我似乎需要添加和删除视图的方法,就像这样; 显然需要更多的东西来告诉ViewPager的内容已经改变以及如何显示更改:
class MainPagerAdapter extends PagerAdapter
{
// This holds all the currently displayable views, in order from left to right.
private ArrayList<View> views = new ArrayList<View>();
public void addView (View v, int position)
{
views.add (position, …Run Code Online (Sandbox Code Playgroud) 精简版:
我有一个具有ViewPager的Activity.ViewPager里面有三个片段.我通过实现Parcelable并将其存储在bundle中来将数据存储在片段中.
现在问题是我在哪里恢复数据.我很困惑,因为(据我所知)ViewPager每次旋转屏幕时都会创建片段的新实例.(创建一个新活动 - >新的ViewPager - > new Fragment).如果我错了,请纠正我.
长版:
我在MainActivity中的ViewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ForecastFragmentPageAdapter(getSupportFragmentManager(),
ForecastActivity.this));
viewPager.setOffscreenPageLimit(2);
Run Code Online (Sandbox Code Playgroud)
我的FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new NowForecastFragment();
} else if (position == 1) {
return new HourlyForecastFragment();
} else {
return new DailyForecastFragment();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的一个片段中保存状态
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
更新:
根据发布到类似问题的其他解决方案,我还添加了setRetainInstance(true); 在我片段的onCreateView中.这就是我保存和恢复状态的方式:
@Override
public …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager fragment-lifecycle