我正在尝试从一个片段替换到另一个片段,但是它可以替换而不更改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
我想念什么吗?我认为它应该显示全部真实。 我需要你的帮助! 谢谢
答案 0 :(得分:0)
我认为问题在于您检查了错误的BottomNavigationView
,onCreateView
中的以下行实际上是在扩大视图的新实例而没有将其附加到屏幕上:
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);