我有一个 Fragment SearchPageFragment
(代表平板电脑上的主视图),它本身包含两个 fragment :
<fragment android:name="com.test.fragments.SearchFormFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:id="@+id/searchFormFragment"
android:tag="searchFormFragmentTag">
<!-- Preview: layout=@layout/fragment_search_form -->
</fragment>
<fragment android:name="com.test.fragments.SearchResultsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/searchResultsFragment">
<!-- Preview: layout=@layout/fragment_search_results -->
</fragment>
一切正常 - 页面加载并且一切正常......直到你改变方向。当你这样做时会出现以下错误:
java.lang.IllegalArgumentException: Binary XML file line #10: Duplicate id 0x7f08001f, tag searchFormFragmentTag, or parent id 0x0 with another fragment for com.test.fragments.SearchFormFragment
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:262)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
这是切换方向时的调用顺序:
SearchPageFragment(4911): Creating...
SearchPageFragment(4911): Inflating...
SearchFormFragment(4911): Creating...
SearchFormFragment(4911): Inflating...
SearchResultsFragment(4911): Creating...
SearchResultsFragment(4911): Inflating...
// Change Orientation
SearchPageFragment(4911): Pausing...
SearchFormFragment(4911): Pausing...
SearchResultsFragment(4911): Pausing...
SearchPageFragment(4911): Destroying...
SearchFormFragment(4911): Destroying...
SearchResultsFragment(4911): Destroying...
// All Seems Normal - But...
SearchPageFragment(4911): Creating...
SearchPageFragment(4911): Creating...
SearchPageFragment(4911): Inflating...
SearchFormFragment(4911): Creating...
SearchFormFragment(4911): Inflating...
SearchResultsFragment(4911): Creating...
SearchResultsFragment(4911): Inflating...
SearchPageFragment(4911): Inflating...
// SearchPageFragment has started twice and crashes when the second one inflates a ***unique*** component
AndroidRuntime(4911): Shutting down VM
有人知道为什么我的容器 Fragment 在方向改变时会被调用两次吗?
最佳答案
明白了:
错误是 SearchPageFragment 的 holder Activity 添加了两次 Fragment
。
当方向发生变化时,Android 将始终保留附加到 View 的 fragment 。
正因为如此,您需要确保如果您在 onCreate()
方法中添加一个 Fragment,您会使用 if 语句将其创建(和添加/替换转换)包围起来以检查savedInstanceState
为 null(如果它不为 null,则表示发生了方向更改)。
if(savedInstanceState == null) {
// Add fragment code here
}
关于android - 切换方向错误 : Fragment Error - Duplicate id, 标记,或父 id 0x0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760369/