gpt4 book ai didi

java - fragment.isVisible() 总是返回 false

转载 作者:行者123 更新时间:2023-11-29 06:54:44 29 4
gpt4 key购买 nike

我正在尝试设置一个覆盖 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com