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

Error when trying to set a TAG to a Fragment in Android

我有一个名为 activity 的 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 class 看起来像这样:

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 转到另一个 activity 然后再回来时,我的片段没有刷新。这是我来自 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

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

提前致谢!

根据我所了解的代码,在 ShoppingListActivity 中实现了一个 ViewPager 以及选项卡。

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

在您的 ShoppinglistActivity 中进行以下更改。

1) 在 class 级别全局声明 ViewPagerAdapter adapter;

2)改变private class ViewPagerAdapter extends FragmentPagerAdapter

将 FragmentPagerAdapter 替换为 FragmentStatePagerAdapter

3) onresume() 的变化

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

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

}