尝试在Android中将标记设置为片段时出错

尝试在Android中将标记设置为片段时出错,android,android-fragments,tags,fragmentmanager,Android,Android Fragments,Tags,Fragmentmanager,我有一个名为:ShoppingListActivity的活动,我在其中添加了3个片段。对于这个例子,我将只使用一个片段。在onCreate方法中,我声明了一个ViewPager如下所示: ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new View

我有一个名为:
ShoppingListActivity
的活动,我在其中添加了3个片段。对于这个例子,我将只使用一个片段。在
onCreate
方法中,我声明了一个
ViewPager
如下所示:

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    Fragment shoppingListFragment = new ShoppingListFragment();
    getSupportFragmentManager().beginTransaction().add(shoppingListFragment, "ShoppingListFragmentTag").commit();
    adapter.addFragment(shoppingListFragment, "SHOPPING LIST");

    viewPager.setAdapter(adapter);
}
private class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> fragmentTitleList = new ArrayList<>();

    ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    void addFragment(Fragment fragment, String title) {
        fragmentList.add(fragment);
        fragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTitleList.get(position);
    }
}
FragmentManager fragmentManager = getSupportFragmentManager();
ShoppingListFragment shoppingListFragment = (ShoppingListFragment) fragmentManager.findFragmentByTag("ShoppingListFragmentTag");
fragmentManager.beginTransaction().detach(shoppingListFragment).attach(shoppingListFragment).commit();
setupViewPager(viewPager)如下所示的方法:

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    Fragment shoppingListFragment = new ShoppingListFragment();
    getSupportFragmentManager().beginTransaction().add(shoppingListFragment, "ShoppingListFragmentTag").commit();
    adapter.addFragment(shoppingListFragment, "SHOPPING LIST");

    viewPager.setAdapter(adapter);
}
private class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> fragmentTitleList = new ArrayList<>();

    ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    void addFragment(Fragment fragment, String title) {
        fragmentList.add(fragment);
        fragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTitleList.get(position);
    }
}
FragmentManager fragmentManager = getSupportFragmentManager();
ShoppingListFragment shoppingListFragment = (ShoppingListFragment) fragmentManager.findFragmentByTag("ShoppingListFragmentTag");
fragmentManager.beginTransaction().detach(shoppingListFragment).attach(shoppingListFragment).commit();
我的
ViewPagerAdapter
类外观如下:

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    Fragment shoppingListFragment = new ShoppingListFragment();
    getSupportFragmentManager().beginTransaction().add(shoppingListFragment, "ShoppingListFragmentTag").commit();
    adapter.addFragment(shoppingListFragment, "SHOPPING LIST");

    viewPager.setAdapter(adapter);
}
private class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> fragmentTitleList = new ArrayList<>();

    ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    void addFragment(Fragment fragment, String title) {
        fragmentList.add(fragment);
        fragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTitleList.get(position);
    }
}
FragmentManager fragmentManager = getSupportFragmentManager();
ShoppingListFragment shoppingListFragment = (ShoppingListFragment) fragmentManager.findFragmentByTag("ShoppingListFragmentTag");
fragmentManager.beginTransaction().detach(shoppingListFragment).attach(shoppingListFragment).commit();
问题是我得到了这个错误:
java.lang.IllegalStateException:无法更改fragment ShoppingListFragment的标记{528673f4#0 ShoppingListFragmentTag}:ShoppingListFragmentTag现在是不是android:switcher:21315585559:0

如何将标记正确设置为片段


提前谢谢

从代码中我了解到,ShoppingListActivity中实现了一个ViewPager以及选项卡

在viewpager中,每个片段都包含来自服务器的内容列表,对吗?现在您想在用户从ShoppingListInfoActivity返回时刷新整个viewpager,对吗

在您的ShoppinglistActivity中执行以下更改

1) 声明
ViewPagerAdapter适配器在类级别全局

2) 更改私有类ViewPagerAdapter扩展碎片PageRadapter

将FragmentPagerAdapter替换为FragmentStatePagerAdapter

3) onresume()中的更改


谢谢你!回答正确。