我正在使用Android应用程序。有一个称为HomeActivity的活动,上面有一个BottomNavigationView。
也有几个片段。
从一个名为SpotsSearch2Fragment的片段中,我打开另一个名为NuevoSpot1Fragment的片段:
ivNuevoSpot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NuevoSpot1Fragment nextFrag= new NuevoSpot1Fragment();
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.frame_layout, nextFrag, "mapaSpots")
.addToBackStack(null)
.commit();
}
});
在NuevoSpot1Fragment中,我从父Activity隐藏了BottomNavigationView:
((HomeActivity) getActivity()).setNavigationVisibility(false);
正常,BottomNavigationView消失了。
这是HomeActivity中的函数,由片段调用以隐藏或显示BottomNavigationView:
public void setNavigationVisibility(boolean visible) {
if (bottomNavigationView.isShown() && !visible) {
bottomNavigationView.setVisibility(View.GONE);
}
else if (!bottomNavigationView.isShown() && visible){
bottomNavigationView.setVisibility(View.VISIBLE);
}
}
NuevoSpot1Fragment上有一个按钮,应再次打开片段SpotsSearch2Fragment。
btnCerrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStack();
}
});
因此,我在SpotsSearch2Fragment中包含了代码:
@Override
public void onResume() {
super.onResume();
Log.d("JSON", "on resume spot");
((HomeActivity) getActivity()).setNavigationVisibility(true);
}
我的问题是,从NuevoSpot1Fragment回到SpotsSearch2Fragment,SpotsSearch2Fragment中的BottomNavigationView仍然不可见。
我究竟做错了什么?
编辑
在不可见的情况下显示不可见的BottomNavigationView:
最佳答案
更换:
public void setNavigationVisibility(boolean visible) {
if (bottomNavigationView.isShown() && !visible) {
bottomNavigationView.setVisibility(View.GONE);
}
else if (!bottomNavigationView.isShown() && visible){
bottomNavigationView.setVisibility(View.VISIBLE);
}
}
带有:
public void setNavigationVisibility(boolean visible) {
if ((bottomNavigationView.getVisibility() == View.VISIBLE) && !visible) {
bottomNavigationView.setVisibility(View.GONE);
}
else if ((bottomNavigationView.getVisibility() != View.VISIBLE) && visible){
bottomNavigationView.setVisibility(View.VISIBLE);
}
}
编辑:并且我建议您在片段中包含此代码以避免Fragments中的
NullPointerException
,并从setNavigationVisibility
变量调用mActivity
方法,并在Fragment中全局声明mActivity
。@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof HomeActivity){
mActivity = (HomeActivity) context;
}
}
关于android - 再次显示BottomNavigationView后未显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58354855/