Java 带viewpager的片段仅加载一次

Java 带viewpager的片段仅加载一次,java,android,android-layout,android-fragments,Java,Android,Android Layout,Android Fragments,我有一个简单的问题。。我有主要的活动。。在它里面我有5个片段,我可以使用底部导航栏移动而没有问题 在第一个片段(配置文件)中,我使用Tablayout和Viewpager在两个片段内部进行了演示。。 第一个片段(朋友)第二个片段(用户) 运行应用程序并打开(配置文件)两个片段(朋友和用户)时出现的问题 第一次就100%工作。。当我使用底部栏返回到其他片段并返回到朋友或用户时,该片段为空且不加载 我想附上我的一些代码,你会需要的 配置文件片段: mSectionsPageAdapter = new

我有一个简单的问题。。我有主要的活动。。在它里面我有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);
}
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();
}}
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();
}}
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 
    }
SectionsPageAdapter:

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);
}
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();
}}
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();
}}
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 
    }
SectionsPageAdapter:

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);
}
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();
}}
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();
}}
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 
    }
公共类节SpageAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
公共部分SPAGEAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}}

您可以使用接口来解决此问题。在“用户”和“朋友”片段中实现接口,并在调用“概要文件”片段“OnCreateView”时调用接口方法。可以在调用接口方法时加载数据。如需参考,请查看此链接:

编辑

很抱歉,您可以不使用接口加载数据。以下是一些示例代码:

配置文件片段:

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);
}
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();
}}
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();
}}
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 
    }
朋友片段:

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);
}
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();
}}
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();
}}
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
s

活动中
要处理底部导航,应使用
活动#getSupportFragmentManager()

但是对于该活动中的任何
片段
s,如果您想要子片段/嵌套片段。您应该使用
Fragment#getChildFragmentManager()


因此,在您的配置文件片段中,在填充两个选项卡页面时,您应该传递它
fragment\getChildFragmentManager()
,而不是
getActivity().getSupportFragmentManager()
jest Use

ViewPagerAdapter(getChildFragmentManager())
  • getChildFragmentManager()


你能给我一个完整的例子吗?我做了你的解决方案,但我在设置ViewPager方法方面有问题。。误差为';addFragment(android.support.v4.app.Fragment,java.lang.String)和#39;在';com.abdullrahman.eng.app.SectionsPageAdapter';不能应用于';(com.abdullrahman.eng.app.FriendsFragment,java.lang.String)和#39;我编辑了问题并添加了SectionsPageAdapter代码。。你们能帮我解决这个问题吗..只要更换
SectionsPageAdapter=newsectionspageadapter(getActivity().getSupportFragmentManager())带有
SectionsPageAdapter适配器=新的SectionsPageAdapter(getChildFragmentManager())
并删除您添加的任何其他解决方法,如错误的setUserVisibleHint或任何其他方法,解决了我的问题。这就是我要找的。:)