fragment.isVisible()始终返回false

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之后,该片段仍然可见

我是在指错吗?

mar*_*o16 5

您可以使用以下方法getUserVisibleHint()来确定您的片段是否对用户可见