[英]ViewPager.setOffscreenPageLimit(0) has no effect at all. How do I only load one page at a time in a ViewPager?
[英]Fragment with viewpager load one time only
我有一個簡單的問題.. 我有 MainActivity.. 在里面我有 5 個片段,我可以使用底部導航欄毫無問題地移動!
在第一個片段(配置文件)中,我在使用 Tablayout 和 Viewpager 的那個拖曳片段中......第一個片段(朋友)第二個片段(用戶)..
當我運行應用程序並打開(配置文件)兩個片段(朋友和用戶)第一次工作 100% 時我的問題.. !
我想附上我的一些代碼,你會需要它..
配置文件片段:
mSectionsPageAdapter = new
SectionsPageAdapter(getActivity().getSupportFragmentManager());
mViewPager = (ViewPager) v.findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) v.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
mSectionsPageAdapter.notifyDataSetChanged();
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new
SectionsPageAdapter(getActivity().getSupportFragmentManager());
adapter.addFragment(new FriendsFragment(), "Friends");
adapter.addFragment(new UsersFragment(), "Online");
viewPager.setAdapter(adapter);
}
SectionsPageAdapter:
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}}
我嘗試在 Friends Fragment 和 Users Fragment 中添加這個問題解決了,但內容只在第一次運行時重復。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
}
SectionsPageAdapter:
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}}
您可以使用接口來解決這個問題。 在“用戶”和“朋友”片段中實現接口,並在調用“配置文件”片段“OnCreateView”時調用接口方法。 您可以在調用接口方法時加載數據。 作為參考,請查看此鏈接: 與其他片段通信
編輯
抱歉,您可以在不使用接口的情況下加載數據。 下面是一些示例代碼:
配置文件片段:
ProfileFragment extends Activity {
FriendsFragment friends;
UsersFragment users;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mSectionsPageAdapter = new
SectionsPageAdapter(getActivity().getSupportFragmentManager());
mViewPager = (ViewPager) v.findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) v.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
mSectionsPageAdapter.notifyDataSetChanged();
friends.update();
users.update();
}
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new
SectionsPageAdapter(getActivity().getSupportFragmentManager());
friends = new FriendsFragment();
users = new UsersFragment();
adapter.addFragment(friends, "Friends");
adapter.addFragment(users, "Online");
viewPager.setAdapter(adapter);
}
朋友片段:
FriendFragment extends Activity {
public void update(){
// load data
}
您的問題的一個可能原因可能是您混淆了FragmentManager
。
在您的Activity
中處理底部導航,您應該使用Activity#getSupportFragmentManager()
。
但是對於該活動中的任何Fragment
,如果您想擁有子/嵌套片段。 您應該使用Fragment#getChildFragmentManager()
。
因此,在您的個人資料片段中,在填充兩個選項卡尋呼機時,您應該傳遞它Fragment#getChildFragmentManager()
而不是getActivity().getSupportFragmentManager()
玩笑 使用
ViewPagerAdapter(getChildFragmentManager())
getChildFragmentManager()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.