我正在尝试设置一个覆盖 fragment ,该 fragment 会在触摸按钮时出现并在再次单击按钮时消失。我没有使用支持库 fragment ,而是使用常规 fragment 。因此,当您单击按钮附加 fragment 时,它会执行此操作,代码如下:
boolean hasNativeFrag = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.native_chat) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
NativeFragment nativeFragment = new NativeFragment();
//Add/remove fragment
if (!hasNativeFrag) {
getFragmentManager().executePendingTransactions();
fragmentTransaction.add(R.id.FragmentContainer, nativeFragment);
hasNativeFrag = true;
}
if(nativeFragment.isVisible()){
fragmentTransaction.hide(nativeFragment);
}
else {
fragmentTransaction.show(nativeFragment);
}
fragmentTransaction.commit();
}
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
但是当我再次单击该按钮时,我希望 if 条件运行,因为它现在可见,并且应该隐藏它。然而 nativeFragment.isVisible() 总是返回 false。我做错了什么?
非常感谢
更新 1: 无法让它与答案提出的任何方法一起使用,但一个简单的 boolean 值至少可以像这样在它们之间切换:
boolean hasNativeFrag = false;
boolean isNativeFragShown = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.native_chat) {
Log.v("NativeChat", "NativeChat");
//Instantiate fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
NativeFragment nativeFragment = new NativeFragment();
//Show/Hide
if (isNativeFragShown) {
fragmentTransaction.hide(nativeFragment);
Log.d("Hidden", "Hidden");
isNativeFragShown = false;
} else {
fragmentTransaction.show(nativeFragment);
Log.d("Shown", "Shown");
isNativeFragShown = true;
}
//Add/remove fragment
if (!hasNativeFrag) {
getFragmentManager().executePendingTransactions();
fragmentTransaction.add(R.id.FragmentContainer, nativeFragment);
isNativeFragShown = true;
hasNativeFrag = true;
}
fragmentTransaction.commit();
} else if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
日志说它在函数之间切换,这很好,但是 fragment 仍然可见,即使在使用 .hide 之后也是如此
我是不是引用了错误的东西?
最佳答案
您可以使用以下方法 getUserVisibleHint()
来确定您的 fragment 是否对用户可见
关于java - fragment.isVisible() 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36771179/