Asi*_*Rex 1 java android android-fragments
我正在尝试设置一个覆盖片段,该片段会在触摸按钮时显示,而在再次单击按钮时消失。我不是在使用支持库片段,而是常规类。因此,当您单击按钮以附加片段时,它会执行以下操作,代码如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我再次单击该按钮时,我希望if条件能够运行,因为它现在可见,并且应该将其隐藏。尽管如此,nativeFragment.isVisible()始终返回false。我究竟做错了什么?
谢谢一大堆
更新1:无法使其与答案提出的任何方法一起使用,但是一个简单的布尔值至少会在它们之间进行切换,如下所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
日志显示它正在功能之间切换,这很好,但是即使使用.hide之后,该片段仍然可见
我是在指错吗?