有一个名为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
中提交的交易中,可以通过其标记找到。
答案 0 :(得分:0)
我发现了一个棘手的解决方案:在AndroidManifest.xml
文件中,将下面的代码添加到提交2个片段的活动中
android:configChanges="orientation|screenSize"
2个片段提供的信息将保持不变,但布局将根据屏幕大小进行调整(例如:GridView将在水平视图中显示比垂直视图更多的列),这正是我所期望的。登记/> 我无法解释它是如何工作的,也不知道这种解决方案的局限性。