我有一个包含 viewpager 的 fragment 。 viewpager 本身包含包含 recyclerview 和 textview 的 fragment 。问题是 textview 在所有 5 个选项卡中显示,但 recyclerview 仅在 2-3 个选项卡中显示(随机)。
这是我的代码
父 fragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
toolbar = (Toolbar) fragmentActivity.findViewById(R.id.my_toolbar);
tabLayout = (TabLayout) fragmentActivity.findViewById(R.id.my_tablayout);
mCollapsingToolbarLayout = (CollapsingToolbarLayout) fragmentActivity.findViewById(R.id.collapsing_toolbar_layout);
viewPager = (ViewPager) fragmentActivity.findViewById(R.id.my_pager);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
adapter = new GameListPagerAdapter(getChildFragmentManager(),getContext());
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(1);
tabLayout.setupWithViewPager(viewPager);
}
ViewPager 适配器
public class GameListPagerAdapter extends FragmentStatePagerAdapter {
private final int PAGE_COUNT = 5;
private Context context;
private String pageTitle[] = {"Replaying", "Planning", "dropped", "playing","completed"};
public GameListPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0 :
return GamesListPagerFragment.newInstance(GiantBomb.REPLAYING);
case 1 :
return GamesListPagerFragment.newInstance(GiantBomb.PLANNING);
case 2 :
return GamesListPagerFragment.newInstance(GiantBomb.DROPPED);
case 3 :
return GamesListPagerFragment.newInstance(GiantBomb.PLAYING);
case 4:
return GamesListPagerFragment.newInstance(GiantBomb.COMPLETED);
default:
return GamesListPagerFragment.newInstance(position);
}
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
return pageTitle[position];
}
}
包含textview和recyclerveiw的子 fragment
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Toaster.make(getContext(),"onActivity");
recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
realmResult = realm.where(GameListDatabase.class).findAll();
Toaster.make(getContext(),realmResult.size()+"");
GameListAdapter adapter = new GameListAdapter(getContext(),realmResult,true);
recyclerView.setAdapter(adapter);
}
最佳答案
首先,不要在适配器的 getItem(position)
方法中创建新项目。相反,创建一个 fragment List
并将其填充到您的构造函数中,这样您就不会每次都创建新实例。
public class GameListPagerAdapter extends FragmentStatePagerAdapter {
private Context context;
private String pageTitle[] = {"Replaying", "Planning", "dropped", "playing", "completed"};
private ArrayList<Fragment> fragments;
public GameListPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
fragments = new ArrayList<>();
fragments.add(GamesListPagerFragment.newInstance(GiantBomb.REPLAYING));
fragments.add(GamesListPagerFragment.newInstance(GiantBomb.PLANNING));
fragments.add(GamesListPagerFragment.newInstance(GiantBomb.DROPPED));
fragments.add(GamesListPagerFragment.newInstance(GiantBomb.PLAYING));
fragments.add(GamesListPagerFragment.newInstance(GiantBomb.COMPLETED));
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return pageTitle[position];
}
}
同时移动以下代码:
Toaster.make(getContext(),"onActivity");
recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
realmResult = realm.where(GameListDatabase.class).findAll();
Toaster.make(getContext(),realmResult.size()+"");
GameListAdapter adapter = new GameListAdapter(getContext(),realmResult,true);
recyclerView.setAdapter(adapter);
从您的 onActivityCreated
到您的子 fragment 的 onCreateView
方法。
如果您没有很多子 fragment ,则可以将 viewPager.setOffscreenPageLimit
设置为您拥有的 fragment 数,在本例中为 5。
关于android - 嵌套 fragment 内的 Recyclerview 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41504079/