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中时,它将确保您获得正确查看的片段。