尝试将 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();
}
}
我有一个名为 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();
}
}