【发布时间】:2015-03-03 21:11:18
【问题描述】:
我正在创建一个使用 viewpager 在 4 个特定片段之间滑动的应用。
到目前为止我读过的所有viewpager的例子,每次调用FragmentPagerAdapter的getPosition方法时都会创建新的片段。所以它是这样的:
return FragmentA.newInstance();
我所做的如下:
在主要活动中
public static final int FRAGMENTS = 4;
public static final String FRAGMENT_LIST ="LIST";
public static final String FRAGMENT_SETTINGS = "SETTINGS";
public static final String FRAGMENT_MAP = "MAP";
public static final String FRAGMENT_TICKET = "TICKET";
MainAdapter _adapter;
ViewPager _pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.add(new FragmentMap(), FRAGMENT_MAP)
.add(new FragmentList(), FRAGMENT_LIST)
.add(new FragmentTicket(), FRAGMENT_TICKET)
.add(new FragmentSettings(), FRAGMENT_SETTINGS)
.commit();
}
_adapter = new MainAdapter(getSupportFragmentManager());
_pager = (ViewPager) findViewById(R.id.pager);
_pager.setAdapter(_adapter);
}
在适配器中:
public class MainAdapter extends FragmentPagerAdapter {
FragmentManager _manager;
public MainAdapter(FragmentManager fm) {
super(fm);
_manager = fm;
}
@Override
public Fragment getItem(int position) {
return _manager.getFragments().get(position);
}
@Override
public int getCount() {
return ActivityMain.FRAGMENTS;
}
}
这会引发异常,因为适配器正在尝试更改 getItem 中每个片段的标记
我的问题是:
a) 每次总是使用同一个片段是不正确的吗?我没有看到使用上述方法或类似方法的示例,它们总是在 getItem 方法中创建一个新实例
b) 如果我希望片段具有一些持久性,那么这是否意味着我应该将每个片段应该保存的数据存储在静态变量中,并始终创建使用这些变量的新实例?
【问题讨论】:
标签: android android-fragments android-viewpager