Закрытый фрагмент все еще появляется под базовым фрагментом - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть 5 фрагментов (дома, настройки, newPost, уведомления и профиль) внутри моей Main2Activity.

Внутри HomeFragment У меня есть RecyclerView с большим количеством просмотров сообщений, каждое сообщение содержит " кнопка "Открыть", которая должна открыть PostFragment. После открытия PostFragment у меня есть 3 варианта, чтобы go вернуться к HomeFragment: нажав кнопку «Назад» на телефоне, нажав кнопку «1053» «назад» в моем сообщении или нажав Home из bottomNavView. Проблема в том, что после исчезновения PostFragment, и мой экран возвращается к HomeFragment, PostFragment все еще можно наблюдать, но под HomeFragment's RecyclerView. Как мне это сделать?

Вот как я открываю свой PostFragment:

viewHolder.itemView.findViewById(R.id.seePostButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment newFragment = new PostFragment();
                FragmentTransaction transaction = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.nav_host_fragment, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });
    }

UPDATE: кажется, что PostFragment полностью исчезнет, ​​если я нажму еще раз, но это не очень эффективно. ОБНОВЛЕНИЕ 2.0:

    public void onBackPressed(){
        getActivity().getSupportFragmentManager().popBackStack();
    }

Используя этот метод: 1. Если я нахожусь в PostFragment и нажимаю Home, PostFragment остается видимым в RecyclerView HomeFragment 2. Если я нахожусь в PostFragment и нажимаю кнопку возврата телефона, проблема больше не происходит 3.Если я нахожусь в PostFragment и нажимаю кнопку XML сообщений, чтобы проблема больше не возникала

НО, в моем ProfileFragment у меня 2tabs (MyPosts и сообщения I ' ve Applied To) TabView подключен к viewPager, который содержит сообщения. Если я открою одну публикацию и коснусь любой из трех опций, которые я упомянул ранее, появится HomeFragment, в котором заметка будет заметна в программе recyclerView. С этой точки, любой нижний элемент, который я нажимаю, PostFragment будет доступен для наблюдения.

HomeFragment с видимым PostFragment между сообщениями: https://imgur.com/61d6PCd

PostFragment: https://imgur.com/vZ8omUx

ProfileFragment: https://imgur.com/TKzgXik

Возвращение назад из PostFragment, открытого из ProfileFragment, должно вернуть меня к ProfileFragment, а не к HomeFragment.

ОБНОВЛЕНИЕ 3: я изменил onBackPressed () на:

        FragmentTransaction transaction = 
        getActivity().getSupportFragmentManager().beginTransaction();
        transaction.remove(this);
        transaction.addToBackStack(null);
        transaction.commit();

Теперь, если я коснусь кнопки «Назад» (не телефона), сообщение больше не будет отображаться за RecyclerView. Но если я использую кнопку возврата телефона, проблема все еще там. Мне нужно каким-то образом включить onBackPressed () в код кнопки «Назад» телефона.

ОБНОВЛЕНИЕ: Окончательное редактирование, проблема решена: поскольку Overrideable onBackPressed доступно только в действии, в котором хранятся фрагменты, которые мне пришлось изменить, например: это:


    @Override
    public void onBackPressed() {
        if(getSupportFragmentManager().findFragmentByTag("POST") == null){
            super.onBackPressed();
        }else{
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.remove(getSupportFragmentManager().findFragmentByTag("POST"));
            transaction.addToBackStack(null);
            transaction.commit();
        }
    }
...