【问题标题】:fragment isInLayout returns false片段 isInLayout 返回 false
【发布时间】:2013-12-02 13:52:15
【问题描述】:

片段何时应该从 isInLayout 方法返回 true?在我的情况下,它返回 false,但我可以看到片段,isVisible 和 isAdded 返回 true。

在我的活动 onCreate 方法中,我称之为:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
FragEventList listFrag = new FragEventList();
transaction.replace(R.id.fragment_container_1, listFrag, "list");
transaction.commit();

这是布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

    <FrameLayout
        android:id="@+id/fragment_container_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>

稍后当 Loader 返回数据时,我想将适配器传递给片段,例如:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    Log.i(TAG, "onLoadFinished(Loader<Cursor> loader, Cursor data)");

    Log.i(TAG, "fragment="+getSupportFragmentManager().findFragmentByTag("list"));

    if (mAdapter != null && data != null) {
        mAdapter.swapCursor(data);

        FragEventList fragment = (FragEventList) getSupportFragmentManager().findFragmentByTag("list");

        if(fragment != null){
            Log.i(TAG, "in layout="+fragment.isInLayout());
            Log.i(TAG, "is added="+fragment.isAdded());
            Log.i(TAG, "is visible="+fragment.isVisible());
        }

        if(fragment != null && fragment.isInLayout())
        {
            fragment.setAdapter(mAdapter);
        }

    } else {
        Log.v(TAG, "onLoadFinished: mAdapter is null");
        onLoaderReset(null);
    }

}

isInLayout 返回 false。

【问题讨论】:

  • 阅读文档 (developer.android.com/reference/android/app/…),如果您不使用 标签包含您的片段,此方法将始终返回 false。这是一种了解片段在布局中是“固定”还是动态添加的方法。
  • 好的,所以基本上只有 isAdded/isVisible 对我来说真的很有用
  • 我想是的,也许你可以尝试做一个非常快速和简单的项目,使用 标签添加一个片段。如果这将导致方法 isInLayout 的返回值为 true,它将证明这一点(在这种情况下,您也可以自己回答自己的问题)。

标签: android android-fragments


【解决方案1】:

片段何时应该从 isInLayout 方法返回 true?

如果片段是通过 XML 定义的布局的一部分,它将返回 true,否则将返回 false。 Relevant documentation part.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多