Фрагмент Android сбрасывается при его замене - PullRequest
0 голосов
/ 06 июня 2018

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

Проблема в том, что все объекты в моем фрагменте сбрасываются после замены фрагмента.

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

Вот мой код для добавления и замены фрагмента в мой FrameLayout:

private void setFragment(Fragment fragment) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.fade_out);
    if (getSupportFragmentManager().findFragmentById(R.id.main_frame) == null) {
        fragmentTransaction.add(R.id.main_frame, fragment);
    }
    else
    {
        fragmentTransaction.replace(R.id.main_frame, fragment);
    }
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

и вот нижний штрих-код навигации для выполнения предыдущей функции и изменения отображаемого фрагмента:

homeFragment = new HomeFragment();
programFragment = new ProgramFragment();
bluetoothFragment = new BluetoothFragment();

mMainNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        test = mMainNav.getMenu().getItem(2);

        switch (item.getItemId()) {
            case R.id.nav_home:
                    //mMainNav.setItemBackgroundResource(R.color.colorPrimary);
                HQ_logo_IV.setVisibility(View.VISIBLE);
                setFragment(homeFragment);
                return true;

            case R.id.nav_program:
                    //mMainNav.setItemBackgroundResource(R.color.colorAccent);
                HQ_logo_IV.setVisibility(View.INVISIBLE);
                setFragment(programFragment);
                return true;

            case R.id.nav_bluetooth:
                    //mMainNav.setItemBackgroundResource(R.color.colorPrimaryDark);
                HQ_logo_IV.setVisibility(View.INVISIBLE);
                setFragment(bluetoothFragment);
                return true;

            default:
                return false;
        }
    }
});

1 Ответ

0 голосов
/ 11 июня 2018

Я нашел способ остановить эту вещь.

Я использовал AsyncTask, чтобы обновить состояние фрагмента.

Я просто поставил new "yourAsyncTaskName"().execute() в начале моего onCreate()метод обновления фрагмента при его создании или замене.

Надеюсь, это поможет.

...