[英]Fragment with viewpager load one time only
I have simple problem.. I have MainActivity.. inside it i have 5 fragments and i can move using bottom navigation bar without problem!我有一个简单的问题.. 我有 MainActivity.. 在里面我有 5 个片段,我可以使用底部导航栏毫无问题地移动!
In first fragment (Profile) i have inside that tow fragment using Tablayout and Viewpager.. First Fragment (Friends) Second Fragment (Users)..在第一个片段(配置文件)中,我在使用 Tablayout 和 Viewpager 的那个拖曳片段中......第一个片段(朋友)第二个片段(用户)..
My problem when i run app and open (Profile) the tow fragments (Friends and Users) Working 100% just in first time.. when i come back to other fragment using bottom bar and come back to friends or users is empty and not load !当我运行应用程序并打开(配置文件)两个片段(朋友和用户)第一次工作 100% 时我的问题.. !
I want attach some of my codes you will need it..我想附上我的一些代码,你会需要它..
Profile Fragment:配置文件片段:
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: 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();
}}
I try to add this in Friends Fragment and Users Fragment the problem was solved but the content duplicated in first time run only.我尝试在 Friends Fragment 和 Users Fragment 中添加这个问题解决了,但内容只在第一次运行时重复。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
}
SectionsPageAdapter: 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();
}}
You can use interface to solve this problem.您可以使用接口来解决这个问题。 Implement interface in your "User" & "Friend" fragments & call the interface method when your "Profile" fragments "OnCreateView" is called.
在“用户”和“朋友”片段中实现接口,并在调用“配置文件”片段“OnCreateView”时调用接口方法。 You can load data when interface method is called.
您可以在调用接口方法时加载数据。 For reference, Please check this link: Communicating with Other Fragments
作为参考,请查看此链接: 与其他片段通信
EDIT编辑
Sorry,you can load data without using Interface.抱歉,您可以在不使用接口的情况下加载数据。 Here is some sample code:
下面是一些示例代码:
Profile Fragment:配置文件片段:
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);
}
Friends Fragment:朋友片段:
FriendFragment extends Activity {
public void update(){
// load data
}
A possible reason for your problems could be you are mixing up FragmentManager
s.您的问题的一个可能原因可能是您混淆了
FragmentManager
。
In your Activity
to handle the bottom navigation you should use Activity#getSupportFragmentManager()
.在您的
Activity
中处理底部导航,您应该使用Activity#getSupportFragmentManager()
。
But for any of the Fragment
s inside that activity, if you want to have children/nested fragments.但是对于该活动中的任何
Fragment
,如果您想拥有子/嵌套片段。 You should use Fragment#getChildFragmentManager()
.您应该使用
Fragment#getChildFragmentManager()
。
So in your profile fragment, while populating the two tabs pager, you should pass it Fragment#getChildFragmentManager()
instead of getActivity().getSupportFragmentManager()
因此,在您的个人资料片段中,在填充两个选项卡寻呼机时,您应该传递它
Fragment#getChildFragmentManager()
而不是getActivity().getSupportFragmentManager()
jest Use玩笑 使用
ViewPagerAdapter(getChildFragmentManager())
getChildFragmentManager()
getChildFragmentManager()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.