Я полагаю, что это потому, что вы сказали, чтобы это не выбрасывало ваш предыдущий макет, поэтому, когда вы поворачиваете его, у вас все еще остается старое представление (которое в данном случае совпадает с новым представлением, поэтому идентификатор конфликтует).
Кроме того, я не уверен, но я думаю, что это:
fragment.setRetainInstance(true);
не нужно?Потому что здесь вы говорите, что НЕ следует воссоздавать вашу активность при изменениях конфигурации:
android:configChanges="orientation|keyboardHidden"
По моему опыту, настройки configChanges в XML достаточно для предотвращения воссоздания.
РЕДАКТИРОВАТЬ:
Мммм, просто смотрю еще раз, как именно вы используете фрагменты?Если код, размещенный здесь, взят из вашей FragmentActivity, то я бы ожидал чего-то подобного для надувания вашего фрагмента и добавления его в Activity:
class SomeActivity extends FragmentActivity
{
...
@Override
public void onCreate( Bundle savedInstance )
{
...
LayoutInflater inflater = getLayoutInflater();
inflater.inflate( R.layout.some_fragment, root );
...
}
}
, когда этот XML выглядит примерно так: some_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.someapp.fragments.SomeFragment">
</fragment>
Так что, думаю, мне не совсем понятно, как вы используете фрагменты.Но использование их таким образом, с настройкой конфигурации XML, успешно отключает воссоздание на ротации для меня.