Избегайте refre sh фрагментов при переключении между ними - PullRequest
0 голосов
/ 13 марта 2020

Я выполнил упражнение с панелью навигации, где я переключаю содержимое (фрагменты), нажимая на них. Проблема в том, что каждый раз, когда я делаю это, я обновляю фрагменты, не имея возможности видеть содержимое перед переключением с них. Это мой код:

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        Fragment fragment;
        switch (item.getItemId()) {
            case R.id.bbn_item1:
                onResume();
                if(isNetworkAvailable()){
                    fragment = new HomeFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                currentIndex=0;
                FragmentTransaction transaction = getSupportFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(R.anim.pull_in_left,R.anim.push_out_right);
                transaction.replace(R.id.fragment_container, fragment);
                transaction.addToBackStack(null);
                transaction.commit();

                return true;
            case R.id.bbn_item2:
                if(isNetworkAvailable()){
                    fragment = new PopularFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                try{
                    if(currentIndex < 1 ){
                        FragmentTransaction transactionb = getSupportFragmentManager()
                                .beginTransaction()
                                .setCustomAnimations(R.anim.pull_in_right,R.anim.push_out_left);
                        transactionb.replace(R.id.fragment_container, fragment);
                        transactionb.addToBackStack(null);
                        transactionb.commit();
                        currentIndex=1;

                    }else if (currentIndex > 1){
                        FragmentTransaction transactionb = getSupportFragmentManager()
                                .beginTransaction()
                                .setCustomAnimations(R.anim.pull_in_left,R.anim.push_out_right);
                        transactionb.replace(R.id.fragment_container, fragment);
                        transactionb.addToBackStack(null);
                        transactionb.commit();
                        currentIndex=1;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


                return true;
            case R.id.bbn_item3:
                if(isNetworkAvailable()){
                    fragment = new PlayingFragment();
                }else {
                    fragment= new NetworkNotAvailable();
                }
                currentIndex=2;
                FragmentTransaction transactionc = getSupportFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(R.anim.pull_in_right,R.anim.push_out_left);
                transactionc.replace(R.id.fragment_container, fragment);
                transactionc.addToBackStack(null);
                transactionc.commit();
                return true;
        }
        return false;
    }
};

В своей деятельности я уже реализовал метод onResume (), но похоже, что он вызывается, как только я открываю фрагмент (он работает как onCreate ())

1 Ответ

0 голосов
/ 25 марта 2020

Я решил сохранить экземпляр каждого фрагмента и передать его в качестве параметра через средство поиска активности вместо обобщенного c "new Fragment ()".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...