85

サポート ライブラリ v4 を使用していますが、質問は、フラグメントが表示されているかどうかを知る方法です。フラグメントで膨張したレイアウトのプロパティを変更するにはどうすればよいですか? 前もって感謝します。

- -編集 - -

FragmentActivityを使用したAndroid開発者チュートリアルのようなフラグメントを使用しています

4

13 に答える 13

54

と の両方が作成されるとすぐにisVisible()戻りisAdded()、実際には表示されません。実際に機能する唯一の解決策は次のとおりです。trueFragment

if (isAdded() && isVisible() && getUserVisibleHint()) {
    // ... do your thing
}

これは仕事をします。限目。

注意: getUserVisibleHint() は非推奨になりました。気をつけて。

于 2016-09-02T13:04:17.847 に答える
8

注意すべきことの 1 つは、現在のフラグメントisVisible()の可視状態を返すことです。サポート ライブラリには問題があり、ネストされたフラグメントがあり、親フラグメント (したがってすべての子フラグメント) を非表示にすると、子はまだ表示されていると言います。

isVisible()最終的なので、残念ながらオーバーライドできません。私の回避策はBaseFragment、すべてのフラグメントが拡張するクラスを作成してから、次のようなメソッドを作成することでした:

public boolean getIsVisible()
{
    if (getParentFragment() != null && getParentFragment() instanceof BaseFragment)
    {
        return isVisible() && ((BaseFragment) getParentFragment()).getIsVisible();
    }
    else
    {
        return isVisible();
    }
}

親フラグメントのいずれかが非表示になっている場合に false を返したいisVisible() && ((BaseFragment) getParentFragment()).getIsVisible();ためです。

これは私にとってはうまくいくようです。

于 2014-06-11T13:57:01.827 に答える