Проверка, существует ли представление перед загрузкой фрагмента - PullRequest
0 голосов
/ 18 января 2019

Я хотел бы увидеть, существует ли представление перед загрузкой фрагмента . В моем методе, который загружает фрагмент, который я имею ниже:

 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.


    fragmentTransaction.replace(R.id.outbound_dashboard_hourly_queued, fragment);
    // Commit the Fragment replace action.
    fragmentTransaction.commit();

}

Я хочу проверить, существует ли R.id.outbound_dashboard_hourly_queued перед загрузкой

Как мне поступить?

Ответы [ 4 ]

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

, пожалуйста, следуйте проверке счетчика перед заменой, если счет == 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 голосов
/ 18 января 2019

просто сделайте 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 голосов
/ 18 января 2019

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

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

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

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

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

попробуйте

Проверьте, добавлен Fragmnet или нет

 if (getCurrentFragment() instanceof YourFragment)

Добавить Framgnet

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

Методы

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

    }
...