我有一个简单的问题..我有MainActivity ..里面我有5个片段,我可以使用底部导航栏移动没有问题!
在第一个片段(Profile)中,我使用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();
}}
答案 0 :(得分:0)
您可以使用界面来解决此问题。在您的&#34;用户&#34;中实现界面&安培; &#34;朋友&#34;碎片&amp;当您的&#34;个人资料&#34;片段&#34; OnCreateView&#34;叫做。您可以在调用interface方法时加载数据。供参考,请检查此链接: Communicating with Other Fragments
修改强>
抱歉,您可以在不使用Interface的情况下加载数据。以下是一些示例代码:
个人资料片段:
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
}
答案 1 :(得分:0)
玩笑
ViewPagerAdapter(getChildFragmentManager())
getChildFragmentManager()
答案 2 :(得分:-1)
问题的一个可能原因可能是你混淆了FragmentManager
。
在Activity
处理底部导航时,您应使用Activity#getSupportFragmentManager()
。
但对于该活动中的任何Fragment
,如果您想拥有子/嵌套片段。您应该使用Fragment#getChildFragmentManager()
。
因此,在您的个人资料片段中,在填充两个标签页面框时,您应该将其传递给Fragment#getChildFragmentManager()
而不是getActivity().getSupportFragmentManager()