如何在BottomNavigationView中更改所选项目

时间:2018-10-17 20:19:20

标签: android

我正在尝试从一个片段替换到另一个片段,但是它可以替换而不更改BottomNavigation中的选定项目。 即使我搜索了很多东西,我也找不到方法。 有人可以帮忙吗?

这是代码:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.fragment_upload, container, false);
       BottomNavigationView bottom =inflater.inflate(R.layout.activity_main,container,false).findViewById(R.id.mainactivity_bottom_navi);


FirebaseDatabase.getInstance().getReference().child("posts").child(postModel.writerUid)
                                        .push().setValue(postModel)
                                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                                            @Override
                                            public void onSuccess(Void aVoid) {

                                                Toast.makeText(getActivity(), "Uploaded Successfully!", Toast.LENGTH_SHORT).show();

                                /*those are what i tried*/

                                                bottom.getMenu().findItem(R.id.action_home).setChecked(true);
                                                //bottom.setSelectedItemId(R.id.action_home);
                                                //View view = bottom.findViewById(R.id.action_home);
                                                //view.performClick();

                                                getFragmentManager().beginTransaction().replace(R.id.mainactivity_framelayout, new HomeFragment()).commit();
                                            }
                                        });

我没有遇到任何错误,只是在不更改所选项目的情况下就将其替换了。 因此,我在主要活动中签入了我点击时选中了哪个项目

//First view
    getFragmentManager().beginTransaction().replace(R.id.mainactivity_framelayout, new HomeFragment()).commit();

    //bottom navi
    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_home:
                    Log.d("checking bottom 1 = ",""+bottomNavigationView.getMenu().findItem(R.id.action_home).isChecked());
                    getFragmentManager().beginTransaction().replace(R.id.mainactivity_framelayout, new HomeFragment()).commit();
                    return true;
                case R.id.action_upload:
                    Log.d("checking bottom 2 = ",""+bottomNavigationView.getMenu().findItem(R.id.action_home).isChecked());
                    getFragmentManager().beginTransaction().replace(R.id.mainactivity_framelayout, new UploadFragment()).commit();
                    return true;
            }
            return false;
        }
    });

我点击了第二个案例两次,第一个案例两次,它显示为:

D/checking bottom 2 =: true
D/checking bottom 2 =: false
D/checking bottom 1 =: false
D/checking bottom 1 =: true

我想念什么吗?我认为它应该显示全部真实。 我需要你的帮助! 谢谢

1 个答案:

答案 0 :(得分:0)

我认为问题在于您检查了错误的BottomNavigationViewonCreateView中的以下行实际上是在扩大视图的新实例而没有将其附加到屏幕上:

BottomNavigationView bottom = inflater.inflate(R.layout.activity_main, container, false).findViewById(R.id.mainactivity_bottom_navi);

与其扩大一个新视图,不如尝试从其活动中访问该视图:

BottomNavigationView bottom = getActivity().findViewById(R.id.mainactivity_bottom_navi);