Sanu0074
@Sanu0074

Как избавиться дублирования кода в разных активити?

Допустим есть основное активити, его тело описано в main_activity_body, в целом это выглядит так:

<include layout="@layout/toolbar" />

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- MAIN Activity -->
        <include layout="@layout/main_activity_body" />
    </FrameLayout>

    <include layout="@layout/menu" />

</android.support.v4.widget.DrawerLayout>

Я хочу создать второе активити, описываю его в файле second_activity_body, но, как мне его создать так чтоб не делать такого:
<include layout="@layout/toolbar" />

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- SECOND Activity -->
        <include layout="@layout/second_activity_body" />
    </FrameLayout>

    <include layout="@layout/menu" />

</android.support.v4.widget.DrawerLayout>

Это жесткое дублирование кода, как избежать этого, как сделать все поумнее?
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
Можно решить эту проблему с помощью ViewStub:
<ViewStub
    android:id="@+id/lazy_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

И в зависимости от Activity, инфлейтишь необходимый layout:
ViewStub lazyLayout = (ViewStub) findViewById(R.id.lazy_layout);
lazyLayout.setLayoutResource(R.layout.main_activity_body); // Либо R.layout.second_activity_body
lazyLayout.inflate();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artem90
@artem90
TeamLead, Developer
Создайте свой класс, унаследованный от DrawerLayout и реализуйте в нем необходимые параметры. А при построении файла представления используйте уже свой класс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы