Проведите, чтобы обновить проблему - PullRequest
0 голосов
/ 27 января 2019

Я добавил фрагмент скрытия к первому фрагменту, и затем он показывает второй фрагмент без каких-либо проблем, но теперь, когда я использую пролистывание, чтобы обновить сбой приложения .. pleeeease, помогите мне решить эту проблему.

чтобы скрыть первый фрагмент, используя этот код:

public void replaceFragment (Fragment someFragment, String tag) {

FragmentManager fm = getFragmentManager();
Fragment fragment = fm.findFragmentByTag(tag);
Fragment fragment2 = fm.findFragmentById(R.id.frameContainer);

if (fragment != fragment2) {
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.setCustomAnimations(R.anim.right_enter, R.anim.left_out, R.anim.left_enter, R.anim.right_out);
    transaction.hide(fragment2);
    transaction.add(R.id.frameContainer,someFragment);
    transaction.addToBackStack(tag);
    transaction.commit();
}

и для свайпа, чтобы обновить в Activity, которую я используюэтот код:

 private void swipe_swipeRefresh() {
        String fragment = null;
        swipeRefreshLayout.setRefreshing(true);
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.frameContainer);
        if (currentFragment instanceof FragmentHome) {
            fragment = "FragmentHome";
            }
        if (currentFragment instanceof BlogFragment) {
            fragment = "BlogFragment";
        }
      Handler handler = new Handler();
        final String finalFragment = null;
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                SettingsMain.reload(HomeActivity.this, finalFragment);
                swipeRefreshLayout.setRefreshing(false);
             SettingsMain.hideDilog();
            }
        }, 2000);
    }

SettingsMain.reload (HomeActivity.this, finalFragment);эта строка происходит от:

  public static void reload(Context context, String tag) {
        Fragment frg;
        FragmentManager manager = ((AppCompatActivity) context).getSupportFragmentManager();

        frg = manager.findFragmentByTag(tag);
        final FragmentTransaction ft = manager.beginTransaction();

      ft.detach(frg);
      ft.attach(frg);
      ft.commit();
    }

1 Ответ

0 голосов
/ 28 января 2019

Обратите внимание, что finalFragment в SettingsMain.reload(HomeActivity.this, finalFragment); - это null в вашем коде из-за следующей строки:

    final String finalFragment = null;

Далее, внутри reload() используется метод frg = manager.findFragmentByTag(tag);.Но tag здесь равно нулю, и поэтому он не может найти фрагмент.В результате frg будет null.Отсоединение и присоединение приведет к сбою, потому что frg равен null.

Чтобы исправить это, попробуйте изменить строку на

final String finalFragment = fragment;
...