在我的Android應用我使用TabLayout
與FragmentStatePagerAdapter
,以顯示動態生成的片段。 它第一次顯示的片段正確,但當回到一些已經查看,並不是相鄰的它顯示一個空白頁...TabLayout顯示一個空白片段,第二時間
我已經看過這個,似乎有兩個這種固定方式:
使用
FragmentStatePagerAdapter
代替FragmentPagerAdapter
,我已經做了,並沒有改變任何東西。變化
adapter = new FragmentStatePagerAdapter(*getSupportFragmentManager*());
到:
adapter = new FragmentStatePagerAdapter(*getChildFragmentManager*());
,我不能這樣做,因爲我在AppCompatActivity
這種方法是在片段...
是否有辦法解決這個問題,而不會擴展這個活動的FragmentActivity
這會搞砸在我的項目中的其他東西?
代碼:
private class SubsPagerAdapter extends FragmentStatePagerAdapter {
private final ArrayList<Fragment> fragmentsList = new ArrayList<>();
private final ArrayList<String> titleList = new ArrayList<>();
SubsPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return fragmentsList.get(position);
}
@Override
public int getCount() {
return fragmentsList.size();
}
void addFragment(Fragment fragment, String title) {
fragmentsList.add(fragment);
titleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public Parcelable saveState() {
return null;
}
}
實現:
subsPager = (ViewPager) findViewById(R.id.subsPager);
tabLayout = (TabLayout) findViewById(R.id.tabs_view);
subsPager.setAdapter(adapter);
tabLayout.setupWithViewPager(subsPager)
編輯 - 碎片代碼:
public class PostsListFragment extends Fragment {
private ArrayList<CustomPost> posts;
private Sorting sorting;
private String name;
private RecyclerView recyclerView;
private SubPostsAdapter adapter;
private LinearLayoutManager linearLayoutManager;
private Fetcher fetcher
public PostsListFragment() {
this.posts = new ArrayList<>();
}
public static Fragment newInstance(String name) {
PostsListFragment pf = new PostsListFragment();
pf.name = name;
return pf;
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
recyclerView = (RecyclerView) inflater.inflate(R.layout.posts_list_holder, container, false);
//default sorting
this.sorting = Sorting.HOT;
this.fetcher = new Fetcher(name);
loadItems();
return recyclerView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
}
private void loadItems() {
if (posts.size() == 0) {
new Thread() {
@Override
public void run() {
posts.addAll(fetcher.fetchPosts(sorting));
new Thread() {
@Override
public void run() {
linearLayoutManager = new LinearLayoutManager(recyclerView.getContext());
adapter = new SubPostsAdapter(posts, getActivity());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
});
}
}.start();
}
}.start();
}
}
}
你是什麼意思「顯示空白頁」? 1)你是否在任何時候重新創建片段? 2)你能展示一個例子片段的代碼嗎?一個ViewPager劇照調用片段的完整生命週期,因此,如果它是空白,並要下載數據時,它會再次這樣做以後 –
片段僅僅是基於名稱字符串顯示從URL下載文字/圖像recyclerview 。 –
當你滑回片段時,你的問題是'pf.name = name'被設置爲null。這不是如何設置的實例變量片段 –