Несколько фрагментов в одной вкладке нижней навигации - PullRequest
0 голосов
/ 22 декабря 2018

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

public class ActivityBottom extends AppCompatActivity {

    final Fragment fragment1 = new FragmentMarker();
    final Fragment fragment2 = new FragmentBookmark();
    final Fragment fragment3 = new FragmentMap();
    final Fragment fragment4 = new FragmentNotification();
    final Fragment fragment5 = new FragmentAccount();
    final FragmentManager fragmentManager = getSupportFragmentManager();
    Fragment active = fragment1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        BottomHelper.disableShiftMode(bottomNavigationView);

        fragmentManager.beginTransaction().add(R.id.frame_container, fragment5, "5").hide(fragment5).commit();
        fragmentManager.beginTransaction().add(R.id.frame_container, fragment4, "4").hide(fragment4).commit();
        fragmentManager.beginTransaction().add(R.id.frame_container, fragment3, "3").hide(fragment3).commit();
        fragmentManager.beginTransaction().add(R.id.frame_container, fragment2, "2").hide(fragment2).commit();
        fragmentManager.beginTransaction().add(R.id.frame_container, fragment1, "1").commit();
    }


    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment = null;
            switch (item.getItemId()) {
                case R.id.nav_home:
                    fragmentManager.beginTransaction().hide(active).show(fragment1).commit();
                    active = fragment1;
                    return true;
                case R.id.nav_bookmark:
                    fragmentManager.beginTransaction().hide(active).show(fragment2).commit();
                    active = fragment2;
                    return true;
                case R.id.nav_blog:
                    fragmentManager.beginTransaction().hide(active).show(fragment3).commit();
                    active = fragment3;
                    return true;
                case R.id.nav_notification:
                    fragmentManager.beginTransaction().hide(active).show(fragment4).commit();
                    active = fragment4;
                    return true;
                case R.id.nav_account:
                    fragmentManager.beginTransaction().hide(active).show(fragment5).commit();
                    active = fragment5;
                    return true;
            }
          return false;
        }
    };
}

Прямо сейчас, когда я пытаюсь открыть второй фрагмент, он открывается вышевсе вкладки.

Вот так я могу открыть второй фрагмент

@Override
        public void onItemClick(Marker marker) {
            MarkerDetailsFragment markerDetailsFragment = new MarkerDetailsFragment();
            Bundle bundle = new Bundle();
            bundle.putParcelable("marker", marker);
            markerDetailsFragment.setArguments(bundle);
            getActivity().getSupportFragmentManager().beginTransaction()
                    .replace(R.id.frame_container, markerDetailsFragment, "MarkerDetailsFragment")
                    .addToBackStack(null)
                    .commit();
        }

1 Ответ

0 голосов
/ 22 декабря 2018

Вероятно, вы хотите сделать что-то вроде в Instagram.Все ваши контейнеры должны иметь собственную историю стеков.

Сначала создайте действие хоста, которое будет содержать нижнее меню навигации и контейнеры.

Затем создайте контейнеры фрагментов, если у вас 5 менюПредметы, создайте 5 контейнеров, внутри них вы можете создать собственную навигационную логику.Затем, если пользователь щелкает пункт меню, необходимо отсоединить активный контейнер и прикрепить выбранный контейнер.Ниже скриншот с подробностями.

enter image description here

...