У меня есть 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();
}
}