如何在MainActivity中的不同事务中提交的两个片段的saveInstanceState?

时间:2015-09-14 04:43:38

标签: android android-fragments transactions fragmenttransaction

有一个名为MainActivity的活动,下面是布局文件(只有两个FrameLayout作为容器)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabletux_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <FrameLayout
        android:id="@+id/tabletux_container1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></FrameLayout>

    <FrameLayout
        android:id="@+id/tabletux_container2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"></FrameLayout>

</LinearLayout>

两个片段:A和B. 如果我将交易(例如,transactionA)提交给&#34;开始&#34;片段A,

    getFragmentManager().beginTransaction().
            replace(R.id.tabletux_container1, displayFragment, 
                    GeneralConstants.DISPLAY_FRAGMENT_FRAGMENTTRANSACTION_TAG).commit();

然后在片段A中(在transactionA之后),我将另一个事务(比如,transactionB)提交给&#34; start&#34;片段B.

        // This is committed in DisplayFragment, not in MainActivity
        getFragmentManager().beginTransaction()
                .replace(R.id.tabletux_container2, detailFragment, 
                        GeneralConstants.DETAIL_FRAGMENT_FRAGMENTTRANSACTION_TAG).commit();

在尝试在MainActivity中保存片段B的InstanceState时,我应该如何检索片段B,特别是在平板电脑旋转两次或更多次之后?

进一步的问题:
1. transactionA和transactionB之间的关系是什么? 2.让我做一个疯狂的推论:transactionA和transactionB在&#34;事务池&#34;中,这样任何一个提交的所有片段都可以从&#34; pool&#34;通过id或标签。如果我错了,请帮忙纠正。
3.如果交易是分开的并且彼此没有关系,我如何在特定交易中找到该片段?我如何找到交易?

我在onSaveInstanceState(Bundle outState)中尝试了MainActivity方法:

detailFragment = (DetailFragment) getFragmentManager()
        .findFragmentByTag(GeneralConstants.DETAIL_FRAGMENT_FRAGMENTTRANSACTION_TAG);

但这会返回null。但片段&#34;开始&#34;在MainActivity中提交的交易中,可以通过其标记找到。

1 个答案:

答案 0 :(得分:0)

我发现了一个棘手的解决方案:在AndroidManifest.xml文件中,将下面的代码添加到提交2个片段的活动中

android:configChanges="orientation|screenSize"

2个片段提供的信息将保持不变,但布局将根据屏幕大小进行调整(例如:GridView将在水平视图中显示比垂直视图更多的列),这正是我所期望的。登记/> 我无法解释它是如何工作的,也不知道这种解决方案的局限性。