Запрет обновления фрагмента с помощью нижней панели навигации - PullRequest
1 голос
/ 12 июня 2019

У меня есть следующий нижний код панели навигации для переключения между 3 фрагментами:

public class MainActivity extends AppCompatActivity {

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

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment = null;

            switch (item.getItemId()) {
                case R.id.navigation_home:
                    fragment = new HomeFragment();
                    break;

                case R.id.navigation_dashboard:
                    fragment = new DashboardFragment();
                    break;

                case R.id.navigation_notifications:
                    fragment = new NotificationsFragment();
                    break;

            }

            return loadFragment(fragment);
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        loadFragment(new HomeFragment());


        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }

    private boolean loadFragment(Fragment fragment) {
        //switching fragment
        if (fragment != null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .commit();
            return true;
        }
        return false;
    }
}

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

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Проблема в том, что вы создаете новый экземпляр каждый раз.Вы можете кэшировать экземпляр как:

    private Fragment mHomeFragment = new HomeFragment();
    private Fragment mDashboardFragment = new DashboardFragment();
    private Fragment mNotificationsFragment = new NotificationsFragment();


    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;

        switch (item.getItemId()) {
            case R.id.navigation_home:
                fragment = mHomeFragment;
                break;

            case R.id.navigation_dashboard:
                fragment = mDashboardFragment;
                break;

            case R.id.navigation_notifications:
                fragment = mNotificationsFragment;
                break;

        }

        return loadFragment(fragment);
    }
0 голосов
/ 12 июня 2019

Как мы могли видеть, вы всегда заменяете свой фрагмент, когда нажимаете на нижнюю навигацию, замена означает, что предыдущий фрагмент удаляется и состояние очищается. Решение состоит в том, чтобы не создавать свой фрагмент каждый раз и использовать метод attach / detach для показа фактического фрагмента. Здесь уже описано об этих методах.

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