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>