Я работаю над приложением, используя нижнюю панель навигации. В приложении есть три вкладки. Главная (Фрагмент 1), Моя страница (Фрагмент 2), Поиск (Фрагмент 3). Все они фрагментарны. А на вкладке «Моя страница» есть кнопка для добавления элемента. Нажав кнопку, я сделал еще один фрагмент, чтобы пользователь мог вставить информацию в элемент и добавить (фрагмент 4). Проблема в том, что когда я нажимаю кнопку добавления на своей странице и нажимаю на нижнюю панель навигации, экран не меняется на Домашнюю, Моя страница или Страница поиска. Он просто показывает страницу «Фрагмент 4», и когда я нажимаю кнопку «Назад», он отклоняет фрагмент 4.
Я хочу изменить, чтобы в любом случае, я нажимаю нижнюю панель навигации, экран переключается на страницу, которую я щелкнул.
Это мой код MainActivity
public class MainActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
final Fragment homefragment = new HomeFragment();
final Fragment mypagefragment = new MyPageFragment();
final Fragment searchfragment = new SearchFragment();
final Fragment mypageaddfragment = new MyPageAddFragment();
final FragmentManager fm = getSupportFragmentManager();
Fragment active = homefragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm.beginTransaction().add(R.id.fragment_container,mypageaddfragment,"4").hide(mypageaddfragment).commit();
fm.beginTransaction().add(R.id.fragment_container,searchfragment,"3").hide(searchfragment).commit();
fm.beginTransaction().add(R.id.fragment_container,mypagefragment,"2").hide(mypagefragment).commit();
fm.beginTransaction().add(R.id.fragment_container,homefragment,"1").commit();
bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.home:
fm.beginTransaction().hide(active).show(homefragment).commit();
active = homefragment;
break;
case R.id.mypage:
fm.beginTransaction().hide(active).show(mypagefragment).commit();
active = mypagefragment;
break;
case R.id.search:
fm.beginTransaction().hide(active).show(searchfragment).commit();
active = searchfragment;
break;
}
return true;
}
};
}
А это мой код для моей страницы.
public class MyPageFragment extends Fragment {
private static final int REQUEST_CODE_FOR_MYPAGE = 9000;
private static final String TAG = "MypageFragment";
final int REGISTER_CODE = 3000;
ImageButton addButton;
ListView petList;
MyPageAdapter myPageAdapter;
public View onCreateView(LayoutInflater layoutInflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){
View view = layoutInflater.inflate(R.layout.fragment_mypage,container,false);
addButton = view.findViewById(R.id.addButton);
petList = view.findViewById(R.id.petList);
myPageAdapter = new MyPageAdapter();
petList.setAdapter(myPageAdapter);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
swapFragment();
}
});
return view;
}
private void swapFragment(){
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
MyPageAddFragment myPageAddFragment = new MyPageAddFragment();
myPageAddFragment.setTargetFragment(MyPageFragment.this, REGISTER_CODE);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.add(R.id.fragment_container,myPageAddFragment);
fragmentTransaction.commit();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode==REGISTER_CODE){
PetInfoItem item = (PetInfoItem) data.getSerializableExtra("PetInfo");
myPageAdapter.addItem(item);
myPageAdapter.notifyDataSetChanged();
Log.d(TAG, item.getPetName());
}
}
}
}