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

时间:2017-03-23 15:22:03

标签: android android-fragments tags fragmentmanager

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

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

setupViewPager(viewPager);方法看起来像这样:

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);
}

我的ViewPagerAdapter课程看起来像这样:

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);
    }
}

我的问题是当我从ShoppingListActivity转到另一个活动而不是回来时,我的碎片没有刷新。这是我的onResume方法的代码,我试图找到要拆分的片段并附加这样的片段:

FragmentManager fragmentManager = getSupportFragmentManager();
ShoppingListFragment shoppingListFragment = (ShoppingListFragment) fragmentManager.findFragmentByTag("ShoppingListFragmentTag");
fragmentManager.beginTransaction().detach(shoppingListFragment).attach(shoppingListFragment).commit();

问题是我收到此错误:java.lang.IllegalStateException: Can't change tag of fragment ShoppingListFragment{528673f4 #0 ShoppingListFragmentTag}: was ShoppingListFragmentTag now android:switcher:2131558559:0

如何正确地将标签设置为片段?

提前致谢!

1 个答案:

答案 0 :(得分:0)

从我理解的代码中,在ShoppingListActivity中实现了一个ViewPager以及制表符。

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

在ShoppinglistActivity中进行以下更改。

1)在班级全球声明ViewPagerAdapter adapter;

2)更改private class ViewPagerAdapter extends FragmentPagerAdapter

将FragmentPagerAdapter替换为FragmentStatePagerAdapter

3)改变onresume()

@Override
protected void onResume() {
    super.onResume();

    if(adapter!=null){
        adapter.notifyDataSetChanged();
    }

}