Перезагрузка фрагмента оставляет пустой экран - PullRequest
0 голосов
/ 07 декабря 2018

Я добавил фрагмент в framelayout следующим образом

    mUserListFragment = new UserListFragment();
    mMessageFragment = new MessageFragment();
    mAccountFragment = new AccountFragment();

    fragmentManager.beginTransaction().add(R.id.frame_layout, mAccountFragment, mAccountFragment.getClass().getSimpleName()).addToBackStack(mAccountFragment.getClass().getSimpleName()).commit();
    fragmentManager.beginTransaction().add(R.id.frame_layout, mMessageFragment, mMessageFragment.getClass().getSimpleName()).addToBackStack(mMessageFragment.getClass().getSimpleName()).commit();
    fragmentManager.beginTransaction().add(R.id.frame_layout, mUserListFragment, mUserListFragment.getClass().getSimpleName()).addToBackStack(mUserListFragment.getClass().getSimpleName()).commit();

Позже я отображаю или скрываю фрагмент следующим образом

//for showing
fragmentManager.beginTransaction().show(fragment).commit();

//for hiding 
fragmentManager.beginTransaction().hide(fragment).commit();

Из одного фрагмента я перехожу к другому Activity, черезкакой-то метод onClick, и эта активность перенаправляет на ту же активность, которая содержала фрагменты.Когда дело доходит до активности держателя фрагмента, я перезагружаю фрагмент в onResume, но он делает этот фрагмент пустым, однако отладкой я узнал, что фрагмент виден и был вызван метод onCreateView, я попытался перезагрузитьфрагмент следующим образом

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

ft.setReorderingAllowed(false);

ft.detach(activeFragment).commitNow();
ft.attach(activeFragment).commitNow(); 

Также я попробовал это

fragmentManager.beginTransaction().detach(activeFragment).attach(activeFragment).commitAllowingStateLoss();

Все эти просто оставить пустой экран.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы можете отслеживать стек фрагментов и количество фрагментов по приведенному ниже коду.

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() {
            public void onBackStackChanged() {
                Log.i(TAG, "back stack changed ");
                int backCount = getSupportFragmentManager().getBackStackEntryCount();

                // you can also track which are current fragments are in stack by
                getSupportFragmentManager().getFragments();

                if(backCount ==0){

                    //then you have to check whats going wrong in your case
                    // suppose to kill current activity also by finish();
                    // I means its depending on your requirements.


                }

            }
        });

Это поможет вам найти свой путь.

0 голосов
/ 07 декабря 2018

Вам необходимо создать свой фрагмент с помощью метода newInstanse ().

public class YourFragment extends Fragment {

    public static YourFragment newInstance() {
        Bundle args = new Bundle();
        YourFragment fragment = new YourFragment();
        fragment.setArguments(args);
        return fragment;
    }
}

В действии:

getSupportFragmentManager()
  .beginTransaction()
  .replace(R.id.content,YourLoanFragment.newInstance(),tag)
  .commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...