Проверка, существует ли представление перед загрузкой фрагмента

Почему обсуждается в C ++ FAQ (boldfacing mine):

В C ++ ссылки, не относящиеся к const, могут связываться с lvalues и ссылки const могут связываться с lvalues ​​или rvalues, но нет ничего, что могло бы связываться с неконстантным значением r. Это необходимо для защиты людей от изменения значений временных объектов, которые уничтожаются до того, как их новое значение может быть использовано. Например:

void incr(int& a) { ++a; }
int i = 0;
incr(i);    // i becomes 1
incr(0);    // error: 0 is not an lvalue

Если этот incr (0) был разрешен либо временным, что никто никогда не видел, будет увеличиваться или - намного хуже - значение 0 станет 1 . Последнее звучит глупо, но на ранних компиляторах Fortran на самом деле была ошибка, которая выделяла место памяти для хранения значения 0.

0
задан Fantômas 18 January 2019 в 12:16
поделиться

4 ответа

, пожалуйста, следуйте проверке счетчика перед заменой, если счет == 0, добавьте еще, ваш код замены должен быть похож на

public void loadFragment(Fragment fragment){
    FragmentManager fragmentManager = Objects.requireNonNull(getActivity()).getSupportFragmentManager();

    // Begin Fragment transaction.
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// Replace the layout holder with the required Fragment object.

    if(fragmentManager.getFragments().size() == 0){
        fragmentTransaction.add(R.id.outbound_dashboard_hourly_queued, fragment).commit();
    }else {
        fragmentTransaction.replace(R.id.outbound_dashboard_hourly_queued, fragment).commit();
    }
    // Commit the Fragment replace action.

}

, пожалуйста, попробуйте с этим и дайте мне знать.

0
ответ дан Sumanta Banerjee 18 January 2019 в 12:16
поделиться

попробуйте

Проверить, добавлен фрагмент или нет

 if (getCurrentFragment() instanceof YourFragment)

Добавить фрагмент

replaceFragment(new HomeFragment(), "YourFragment");

[ 119] Методы

    private void replaceFragment(Fragment fragment, String tag)
    {
        Fragment currentFragment = getCurrentFragment();
        if (currentFragment != null)
            getSupportFragmentManager().beginTransaction().remove(currentFragment).commit();

        getSupportFragmentManager().beginTransaction().add(R.id.container_main, fragment, tag).commit();
    }

    public Fragment getCurrentFragment()
    {
        FragmentManager manager = getSupportFragmentManager();
        return manager.findFragmentById(R.id.container_main);
    }

    private void popBackStack()
    {
        FragmentManager fragmentManager = getSupportFragmentManager();
        int total = fragmentManager.getBackStackEntryCount();
        for (int i = 0; i < total; i++)
        {
            fragmentManager.popBackStack();
        }

    }
0
ответ дан Parag Ghetiya 18 January 2019 в 12:16
поделиться

просто сделайте findViewById(R.id.outbound_dashboard_hourly_queued) и затем загрузите фрагмент, если представление не Null, сохраните проверку if.

public void loadFragment(Fragment fragment){
    FragmentManager fragmentManager = Objects.requireNonNull(getActivity()).getSupportFragmentManager();

    // Begin Fragment transaction.
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// Replace the layout holder with the required Fragment object.
    View yourView= findViewById(R.id.outbound_dashboard_hourly_queued);
    if(yourView!=null){
    fragmentTransaction.replace(R.id.outbound_dashboard_hourly_queued, fragment);
    // Commit the Fragment replace action.
    fragmentTransaction.commit();
  }

}
0
ответ дан Anmol 18 January 2019 в 12:16
поделиться

Вы можете использовать метод findFragmentByTag (тег String), предоставленный FragmentManager, чтобы проверить, существует ли фрагмент уже или нет.

Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG);

Чтобы это работало, вам нужно зафиксировать свой фрагмент с этим TAG, используя -

fragmentTransaction.replace(R.id.outbound_dashboard_hourly_queued, fragment, TAG);

0
ответ дан Vishal Arora 18 January 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: