【问题标题】:Error when trying to set a TAG to a Fragment in Android尝试在 Android 中将 TAG 设置为 Fragment 时出错
【发布时间】:2017-03-23 15:22:03
【问题描述】:

我有一个名为: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

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

提前致谢!

【问题讨论】:

    标签: android android-fragments tags fragmentmanager


    【解决方案1】:

    从我理解的代码来看,在 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();
        }
    
    }
    

    【讨论】:

    • 谢谢!正确答案。
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多