Итак архитектура моего приложения приблизительно следующая:
Если класс PropertiesActivity (аналогия с примером ru.startandroid.develop.p1151multiplescreen MainActivity)
Код: Выделить всё
public class PropertiesActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_properties);
...
if (withDetails) {
DetailsFragment details = (DetailsFragment) getSupportFragmentManager()
.findFragmentById(R.id.cont);
if (details == null || details.getPosition() != possition) {
details = DetailsFragment.newInstance(possition);
getSupportFragmentManager().beginTransaction()
.replace(R.id.cont, details).commit();
}
} else {
Intent newintent = new Intent(this, DetailsActivity.class);
newintent.putExtra("possition", possition);
startActivity(newintent);
}
}
}
Но когда я поворачиваю планшт, я вижу следующие логи:
- запускаю активность PropertiesActivity
02-27 13:48:16.021: V/com.my.app.PropertiesActivity(18446): onCreate() com.my.app.PropertiesActivity@41905b98
02-27 13:48:16.041: V/com.my.app.PropertiesActivity(18446): new DetailsFragment()
02-27 13:48:16.041: V/com.my.app.PropertiesActivity(18446): onStart() com.my.app.PropertiesActivity@41905b98
02-27 13:48:31.591: V/com.my.app.DetailsFragment(18446): onCreate() DetailsFragment{41916738 #1 id=0x7f09001a}
02-27 13:48:31.591: V/com.my.app.DetailsFragment(18446): onCreateView() DetailsFragment{41916738 #1 id=0x7f09001a}
02-27 13:48:36.531: V/com.my.app.DetailsFragment(18446): onStart() DetailsFragment{41916738 #1 id=0x7f09001a}
02-27 13:48:36.531: V/com.my.app.PropertiesActivity(18446): onResume() com.my.app.PropertiesActivity@41905b98
02-27 13:48:36.531: V/com.my.app.DetailsFragment(18446): onResume() DetailsFragment{41916738 #1 id=0x7f09001a}
---> вот тут перевотор из land в port
02-27 13:49:06.121: V/com.my.app.PropertiesActivity(18446): onPause() com.my.app.PropertiesActivity@41905b98
02-27 13:49:06.121: V/com.my.app.DetailsFragment(18446): onPause() DetailsFragment{41916738 #1 id=0x7f09001a}
02-27 13:49:06.131: V/com.my.app.PropertiesActivity(18446): onStop() com.my.app.PropertiesActivity@41905b98
02-27 13:49:06.131: V/com.my.app.DetailsFragment(18446): onStop() DetailsFragment{41916738 #1 id=0x7f09001a}
02-27 13:49:06.141: V/com.my.app.PropertiesActivity(18446): onDestroy() com.my.app.PropertiesActivity@41905b98
02-27 13:49:24.741: V/com.my.app.DetailsFragment(18446): onDestroy() DetailsFragment{41916738 #1 id=0x7f09001a}
- выше равершение PropertiesActivity в land конфигурации, ниже перезапуск в port конфигурации
02-27 13:49:24.771: V/com.my.app.DetailsFragment(18446): onCreate() DetailsFragment{419324b0 #1 id=0x7f09001a}
02-27 13:49:24.881: V/com.my.app.PropertiesActivity(18446): onCreate() com.my.app.PropertiesActivity@41931410
02-27 13:49:24.881: V/com.my.app.PropertiesActivity(18446): onStart() com.my.app.PropertiesActivity@41931410
02-27 13:49:26.381: V/com.my.app.DetailsFragment(18446): onCreateView() DetailsFragment{419324b0 #1 id=0x7f09001a}
02-27 13:49:27.611: V/com.my.app.DetailsFragment(18446): onStart() DetailsFragment{419324b0 #1 id=0x7f09001a}
02-27 13:49:27.621: V/com.my.app.PropertiesActivity(18446): onResume() com.my.app.PropertiesActivity@41931410
02-27 13:49:27.621: V/com.my.app.DetailsFragment(18446): onResume() DetailsFragment{419324b0 #1 id=0x7f09001a}
Вопрос почему запускается инициализация фрагмента DetailsFragment:onCreateView() для фрагмента id=0x7f09001a ведь он в данный момент
на экране не отображается потому как для port конфигурации в xml файле указан только TitlesFragment фрагмент,
DetailsFragment вроде как не должен прорисовыватся?
дальше еще интересней, выбираю категорию из списка TitlesFragment:
02-27 13:56:53.521: V/com.my.app.PropertiesActivity(18446): new DetailsActivity()
Создается новая активность
02-27 13:56:53.581: V/com.my.app.PropertiesActivity(18446): onPause() com.my.app.PropertiesActivity@41931410
02-27 13:56:53.591: V/com.my.app.DetailsFragment(18446): onPause() DetailsFragment{419324b0 #1 id=0x7f09001a}
02-27 13:56:53.621: V/com.my.app.DetailsActivity(18446): onCreate()
02-27 13:56:53.631: V/com.my.app.DetailsActivity(18446): new DetailsFragment()
02-27 13:56:53.641: V/com.my.app.DetailsFragment(18446): onCreate DetailsFragment{418848e0 #0 id=0x1020002}
02-27 13:56:53.711: V/com.my.app.DetailsFragment(18446): onCreateView() DetailsFragment{418848e0 #0 id=0x1020002}
И вот тут создается новый фрагмент DetailsFragment{id=0x1020002} который уже нормально отображется на экране
А старый который не отображался DetailsFragment{id=0x7f09001a} завершается.
02-27 13:56:57.991: V/com.my.app.DetailsFragment(18446): onStart() DetailsFragment{418848e0 #0 id=0x1020002}
02-27 13:56:57.991: V/com.my.app.DetailsFragment(18446): onResume() DetailsFragment{418848e0 #0 id=0x1020002}
02-27 13:56:58.581: V/com.my.app.PropertiesActivity(18446): onStop() com.my.app.PropertiesActivity@41931410
02-27 13:56:58.581: V/com.my.app.DetailsFragment(18446): onStop() DetailsFragment{419324b0 #1 id=0x7f09001a}
Вопрос почему присходит создание невидимого фрагмента DetailsFragment{id=0x7f09001a} при изменение из land в port?
Если запускать или только в land или только в port - то "ненужных" фрагментов не содается