Arhn - архитектура программирования

Включенный макет -> как заполнить

Я включил menu_bar.xml в каждый макет для каждого действия, кроме области LoginActivity.

Мне нужно заполнить menu_bar реальным именем слева и получать сообщения.

Как заполнить textView, чтобы сохранить данные во всех других действиях?

Я попытался создать BaseActivity и расширить его в других действиях, но заполняется только один раз, в других действиях возвращается значение по умолчанию для textView.

public class BaseActivity extends Activity {
XApplication xApplication;
TextView realName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    xApplication=(XApplication)getApplication();
    setContentView(R.layout.menu_bar);
    realName=(TextView)findViewById(R.id.realName);
    realName.setText(Preferences.getInstance().getString(Constants.REAL_NAME,""));

}

}

введите здесь описание изображения


  • при запуске другой активности макет будет снова раздуваться. вам нужно заполнить его снова, чтобы наследование могло решить вашу проблему 24.03.2015

Ответы:


1

Создайте общий макет для своей базовой деятельности. а затем включите этот макет во все макеты, используя тег, который вы хотите сделать одинаковым.

После этого создайте одно абстрактное действие, а затем обработайте все нажатия кнопок и кода в этом действии, а затем расширите это действие во всех других действиях, в которые вы включили базовый макет.

Например

макет общих кнопок xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/tabhost_bg"
    android:gravity="center"
    android:orientation="horizontal" 
    android:weightSum="3">

    <Button
        android:id="@+id/btnHome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_btn_active" 
        android:layout_weight="1"
        android:text="@string/label_home"
        style="@style/bottom_tab_btn"/>

    <Button
        android:id="@+id/btnSetting"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_btn_active" 
        android:layout_weight="1"
        android:text="@string/label_settings"
        style="@style/bottom_tab_btn"/>

    <Button
        android:id="@+id/btnMore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_btn_active" 
        android:layout_weight="1"
        android:text="@string/label_more"
        style="@style/bottom_tab_btn"/>

</LinearLayout>

Вот макет xml, в который вы можете включить вышеуказанный файл XML.

<include
        android:id="@+id/bottombar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/bottom_bar" />

Здесь android:layout_width и android:layout_height и layout являются обязательными атрибутами.

Теперь вот базовая активность, которая обрабатывает щелчок общих элементов управления.

public abstract class BottomBar extends Activity implements OnClickListener {

    protected Button btnHome;
    Button btnSetting, btnMore;
    private Activity mActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = this;
    }

    protected void mappingWidgets() {

        btnHome = (Button) findViewById(R.id.btnHome);
        btnSetting = (Button) findViewById(R.id.btnSetting);
        btnMore = (Button) findViewById(R.id.btnMore);

        btnHome.setOnClickListener(this);
        btnSetting.setOnClickListener(this);
        btnMore.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v == null)
            throw new NullPointerException(
                    "You are refering null object. "
                            + "Please check weather you had called super class method mappingWidgets() or not");
        if (v == btnHome) {

        } else if (v == btnSetting) {

        }else if(v == btnMore) {

        }
    }

    protected void handleBackgrounds(View v) {
        if (v == btnHome) {
            btnHome.setBackgroundResource(R.drawable.bottom_btn_hover);
            btnSetting.setBackgroundResource(R.drawable.bottom_btn_active);
            btnMore.setBackgroundResource(R.drawable.bottom_btn_active);

        } else if (v == btnSetting) {
            btnHome.setBackgroundResource(R.drawable.bottom_btn_active);
            btnSetting.setBackgroundResource(R.drawable.bottom_btn_hover);
            btnMore.setBackgroundResource(R.drawable.bottom_btn_active);

        } else if (v == btnMore) {
            btnHome.setBackgroundResource(R.drawable.bottom_btn_active);
            btnSetting.setBackgroundResource(R.drawable.bottom_btn_active);
            btnMore.setBackgroundResource(R.drawable.bottom_btn_hover);
        }
    }

}

Теперь остался один шаг, чтобы распространить эту базовую активность на все ваши активности.

Вы можете расширить действие Base в действии, используя ключевое слово extends. Например

public class MyActivity extends BottomBar

Примечание. Из дочерней активности вы должны вызвать суперметод базового класса, чтобы обработать щелчок общих элементов управления вашего базового макета.

Таким образом, вы можете реализовать несколько общих макетов в рамках одного действия.

Надеюсь, что это поможет вам. Наслаждаться!!

ПРЕДОСТАВЛЕНИЕ: Как создать общий XML-макет Android для всех видов деятельности

24.03.2015
  • Я уже сделал это для кнопок, но у меня есть TextView для заполнения и нет сохранения информации, например, когда я переключаюсь на следующее действие, значения теряются... 26.03.2015
  • TextView не будет постоянным, потому что, хотя вы включаете один и тот же файл xml в разные действия, но контекст одинаков. Вы должны передать значение, используя намерение/пакет, а затем повторно заполнить в textView нового действия. 26.03.2015
  • Можно реализовать фрагментами? 26.03.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..