1

2 つのフラグメントを並べてタブレット用の動的 UI を構築しています。

getSupportFragmentManager().findFragmentById(R.id.my_fragment)my_fragments は、プライマリ listfragment の次に表示される 2 番目のフラグメントである で表示されるレイアウトを認識します。しかし、いくつかのローテーションとクリックの後、getSupportFragmentManager().findFragmentById() はフラグメントを返します (別のレイアウトが表示され、listfragment のみが表示されます)。

@Override
public void onRSSMessageSelected(int position) {
    AppEngine.getInstance().setRSSMessagePosition(position);
    // The user selected the RSSMessge from the RSSMessagesList

    // Capture the detail fragment from the activity layout
    RSSMessageDetail fragment = (RSSMessageDetail)
            getSupportFragmentManager().findFragmentById(R.id.rssmessage_detail);


    // BUG: supportManager doesn't return null even if it should
    if (fragment!=null) {
        fragment.updateRSSMessageDetail();

    } else {
        fragment = new RSSMessageDetail();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        //add the transaction to the back stack so the user can navigate back
        transaction.replace(R.id.fragment_container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }
}

レイアウト:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

レイアウト土地:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment android:name="cz.cvut.sabattom.fragment.RSSMessagesList"
              android:id="@+id/feed_messages_list"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="cz.cvut.sabattom.fragment.RSSMessageDetail"
              android:id="@+id/rssmessage_detail"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>
4

1 に答える 1

0

メソッド isInLayout() で解決しました

if (fragment!=null&&fragment.isInLayout()) {
    fragment.updateRSSMessageDetail();
}
于 2014-03-18T15:44:07.217 に答える