Моей ситуацией является Activity A, которая содержит фрагмент B. Я всегда реализую его так.
Макет для действия A:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Макет для фрагмента B:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_title"
android:layout_centerInParent="true"
android:background="@drawable/green_button"
android:textColor="@android:color/white"/>
</RelativeLayout>
Это отлично работает, но если мы откроем монитор Android-устройств и посмотрим на View Hierarchy:
Итак, мне не нравится, что в моей иерархии есть два одинаковых бесполезных FrameLayouts, и я могу сократить свой файл R.id.container. Я делаю это так:
onCreate (Bundle args) реализация в моей деятельности A:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.add(android.R.id.content, FragmentB.newInstance()).commit();
}
Я просто не устанавливаю контент для своей активности и прикрепляю свой фрагмент B к системному контейнеру android.R.id.content. Это отлично работает для меня. Я удалил один бесполезный include.
Мой вопрос - это хорошая практика сделать это "взломать". Может ли это привести к сбою моего приложения в любом случае и какие проблемы могут возникнуть после этой реализации? Может быть, у кого-нибудь есть полезный опыт в этом вопросе?
Спасибо всем за хорошие ответы.