на данный момент я звоню и создаю такие фрагменты:
if (getSupportFragmentManager().findFragmentById(R.id.fragment_list) == null) {
list = new MyListFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_list, list).commit();
}
Но я задаюсь вопросом, называется ли это так называемой лучшей практикой, потому что мне кажется, что это очень шаблонный код. Есть ли лучшие способы?
Используйте XML-макеты и классы фрагментов. Здесь я создаю макет с 2 фрагментами. Класс раздувает макет fragment_actionbarcompat.xml
(этот код здесь не показан, а файл основного макета). И я создаю файл макета для деятельности, в которой размещаются 2 фрагмента.
Класс ActionBarCompatFragment переопределяет метод onCreateView для раздувания его макета. Это вводится в тег фрагмента в макете.
В вашем случае, как правило, вы не просто добавляете в обычный ListFragment
, вы расширяете ListFragment
и добавляете в него свой код. Это способ лучше поддерживать модные модели, такие как Model-View-Controller. Фрагменты предназначены для изолированных отсеков, поэтому вы можете повторно использовать их между действиями, если хотите. В большинстве случаев ваш класс будет придерживаться логики для загрузки данных, необходимых фрагменту.
ActionBarCompatFragment.java
@Override
public final View onCreateView(LayoutInflater inflater, ViewGroup root, Bundle savedInstanceState) {
final int layoutId = R.layout.fragment_actionbarcompat;
return inflater.inflate(layoutId, root, false);
}
Файл: activity_main.xml
<?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" >
<fragment
android:id="@+id/ActionBarCompatFragment"
android:layout_width="@dimen/ActionBarSize"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
class="com.packagename.app.ActionBarCompatFragment" >
<!-- Preview: layout=@layout/fragment_actionbarcompat -->
</fragment>
<fragment
android:id="@+id/ComposerFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/ActionBarCompatFragment"
class="com.packagename.app.ComposerFragment" >
<!-- Preview: layout=@layout/fragment_composer -->
</fragment>
</RelativeLayout>
onCreate()
который создает экземплярMyListFragment extend ListFragment
. Но я задавался вопросом, есть ли лучшие способы «вызвать» фрагмент помимо моего кода, опубликованного выше (проверить ноль, создать новый myfragment, начать, зафиксировать и т. Д.).