Фрагмент с загрузкой в ​​viewpager только один раз - PullRequest
0 голосов
/ 14 мая 2018

У меня простая проблема ... У меня есть 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();
}}

Я пытаюсь добавить это в «Фрагмент друзей» и «Фрагмент пользователей», проблема была решена, но содержимое дублируется только при первом запуске.

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

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Возможной причиной ваших проблем может быть то, что вы путаете FragmentManager s.

В вашем Activity для обработки нижней навигации вы должны использовать Activity#getSupportFragmentManager().

Нодля любого из Fragment внутри этого действия, если вы хотите иметь дочерние / вложенные фрагменты.Вы должны использовать Fragment#getChildFragmentManager().

Таким образом, во фрагменте вашего профиля, при заполнении двух вкладок пейджером, вы должны передать его Fragment#getChildFragmentManager() вместо getActivity().getSupportFragmentManager()

0 голосов
/ 14 мая 2018

Вы можете использовать интерфейс для решения этой проблемы.Реализуйте интерфейс во фрагментах «Пользователь» и «Друг» и вызовите метод интерфейса при вызове фрагментов «Профиль» «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 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...