Android 使用viewpager打开片段时设置片段标记
以下是我代码的一部分:Android 使用viewpager打开片段时设置片段标记,android,fragment,Android,Fragment,以下是我代码的一部分: public class MenuExpenses extends Fragment { private ViewPager viewPager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @O
public class MenuExpenses extends Fragment {
private ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.expenses,container, false);
viewPager = (ViewPager) root.findViewById(R.id.pager);
viewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
// Bind the tabs to the ViewPager
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) root.findViewById(R.id.tabs);
tabs.setViewPager(viewPager);
return root;
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
private final String[] TITLES = { "Daily", "Recurring" };
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return new MenuExpensesDaily();
case 1: return new IncomeList2();
default: return new MenuExpensesDaily();
}
}
}
}
菜单Expensesday和IncomeList2都是片段。那么我如何在这里为它们设置片段标记呢?您可以覆盖InstanceItem方法,将片段保存到SparseArray/HashMap,然后创建一个方法来返回带有位置的片段。现在,您将能够访问选定的片段并为其设置标记。您是否成功地使其工作?我只是使用了不同的方法:我认为这不是正确的解决方案,因为fragmentManager存储片段,并且当活动重新创建时,它仍然在其中引用片段,这意味着片段管理器不会调用viewpager实例化Item方法,因此映射中的数据不会填充正确的值。我仍在寻找更好的方法,但没有找到yet@Alireza,当活动重新创建时,ViewPager和适配器也将重新创建。InstanceItem将在每次需要显示页面时被调用,InstanceItem将在片段不存在时调用getItem,或者如果已经创建了项,它将从fragmentManager获得,因此当您将片段存储在InstanceItem中时,它将确保您获得正确查看的片段。