使用片段问题的底部导航栏

时间:2020-07-13 12:59:55

标签: android-fragments bottomnavigationview

我正在使用底部导航栏开发一个应用程序。 该应用程序具有三个标签。主页(片段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());
            }
        }
    }

}

0 个答案:

没有答案