Android 标签碎片是';t重新加载后显示
我正在创建一个带有查看寻呼机和选项卡的应用程序: 第一次单击底部导航中的“菜单”项时,通过单击选项卡并滑动(viewpager),文本frag1、frag2和frag3将按预期显示在屏幕上 见下图: 但当我点击另一个项目(如主页)并返回“菜单”项目时,文本框1等不会显示。见下图: 带viewpageradapter的菜单片段:Android 标签碎片是';t重新加载后显示,android,Android,我正在创建一个带有查看寻呼机和选项卡的应用程序: 第一次单击底部导航中的“菜单”项时,通过单击选项卡并滑动(viewpager),文本frag1、frag2和frag3将按预期显示在屏幕上 见下图: 但当我点击另一个项目(如主页)并返回“菜单”项目时,文本框1等不会显示。见下图: 带viewpageradapter的菜单片段: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bun
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu, container, false);
setHasOptionsMenu(true);
ButterKnife.bind(this, view);
FragmentManager fragManager = myContext.getSupportFragmentManager();
viewPagerAdapter = new ViewPagerAdapter(fragManager);
viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG1"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`
viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG2"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`
viewPagerAdapter.addFragment(new MenuRecyclerViewFragment(), "FRAG3"); // `new MenuRecyclerViewFragment()` should be inside `FragmentPagerAdapter.getItem()`
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
return view;
}
class ViewPagerAdapter extends FragmentPagerAdapter {
public final List<Fragment> mFragmentList = new ArrayList<>(); // this line can cause crashes
public final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = mFragmentList.get(position);
Bundle bundle = new Bundle();
bundle.putString("text", mFragmentTitleList.get(position));
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment); // this line can cause crashes
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
您的ViewPagerAdapter类需要通过FragmentStatePagerAdapter而不是FragmentPagerAdapter进行扩展。
查看FragmentStatePagerAdapter的更多详细信息。第二次访问此片段时,getArguments()不再为null。 请改用savedInstanceState捆绑包。1。)由ViewPager承载的片段应由
FragmentPagerAdapter.getItem()创建
2.)片段(托管片段)内的viewPager应提供getChildFragmentManager()
,而不是context.getSupportFragmentManager()
,以使其正常工作
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu_recycler_view, container, false);
ButterKnife.bind(this, view);
Bundle bundle = this.getArguments();
if (bundle != null) {
String value = bundle.getString("text", "test");
textView.setText(value);
}
return view;
}
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
if(position == 0) return new MenuRecyclerViewFragment();
if(position == 1) return new MenuRecyclerViewFragment();
if(position == 2) return new MenuRecyclerViewFragment();
throw new IllegalStateException("Unexpected position " + position);
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
if(position == 0) return "FRAG1";
if(position == 1) return "FRAG2";
if(position == 2) return "FRAG3";
throw new IllegalStateException("Unexpected position " + position);
}
}