Совместное использование объекта между вкладками (различные действия) - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь найти лучшее решение для проблемы: я разрабатываю приложение с 3 вкладками.Я получаю XML-данные из службы отдыха и анализирую их в объект (есть только один запрос).3 вкладки теперь отображают различные части этих данных.Я думал о разделении приложения на различные действия, чтобы сделать код более читабельным.Как я могу разделить дату между действиями?Я знаю, что этот вопрос задавался миллион раз, но я все еще не могу найти решение.

  1. объект приложения должен быть производным от класса Application, но мой основнойактивность уже получена из класса TabActivity.использовать другой основной класс и затем запустить мой класс табуляции с намерением?

  2. Хэш-карта слабых ссылок на объекты. Кажется пустой тратой памяти, но это было бы возможно.

  3. Поместите весь код в одно упражнение и покончите с ним.

Спасибо за любую помощь:)

Ответы [ 5 ]

1 голос
/ 15 ноября 2011

Данные:

import android.app.Application;
public class Data extends Application {

private int blupp = 0;

public void setBlupp(final int bla) {
    blupp = bla;
}

public int getBlupp() {
    return blupp;
}
}

Установка данных в методе oncreate () одного действия:

final Data myData = ((Data) getApplicationContext());
myData.setBlupp(12);

Получение данных в методе oncreate () другого:

final Data myData = ((Data) getApplicationContext());
final int test = myData.getBlupp();

В манифесте Android:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name="Data">

Данные класса должны быть там.Это было довольно просто.Форматирование немного запутано в этом форуме.Я не совсем понимаю с форматом кода.:( Спасибо за помощь.

1 голос
/ 14 ноября 2011

Идеальное решение состоит в том, что операция уведомляет службу, которая запускает и обрабатывает запрос на сохранение, сохраняет результат где-нибудь, например, в sqlite-db, затем служба уведомляет операцию о том, что транзакция выполнена, и может запроситьdata.

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

1 голос
/ 14 ноября 2011

Во всех моих приложениях я использую класс Context (вызываемый через Singleton ), который хранит всю информацию и данные уровня приложения , которые имеют какую-либо причину для совместного использования в различных видах деятельности.

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

Пример синглтона:

public class AppContext {

    public String username = null;

    //////////////////
    // below the singleton implementation
    //////////////////

    private static final AppContext instance = new AppContext();

    // Private constructor prevents instantiation from other classes
    private AppContext() { }

    public static AppContext getInstance() {
        return instance;
    }
}

Когда вы получили свои данные из Интернета (здесь имя пользователя):

AppContext.getInstance().username = receivedUsername;

Чтобы получить это в одном из ваших действий:

myLabel.setText(AppContext.getInstance().username);

PS1: расширение приложения для достижения такой цели не кажется мне хорошей вещью. Предполагается, что расширение класса Application расширяет нормальное поведение приложения, а не является средством хранения общих данных.

PS2: ваша слабая справочная карта может быть добавлена ​​в объект Context для структурирования ваших данных

0 голосов
/ 14 ноября 2011

В зависимости от данных, есть несколько способов сделать это.Насколько большие данные?Если он только текстовый и не слишком большой, то, возможно, не будет проблем с сохранением его в памяти на протяжении всего срока службы приложения.

Если вы разбили свое приложение на различные действия, у вас есть два варианта:

  • Передача данных между действиями в качестве преднамеренных дополнений.Допустим, что отображаемое по умолчанию действие извлекает данные.Если вы хотите просмотреть другие части данных, вы можете объединить нужные данные в намерение и извлечь их в только что созданной деятельности, используя getIntent().getExtras().
  • Хранение данных в одиночном виде или в видепеременная экземпляра подкласса приложения.Я бы не советовал использовать синглтон, так как наличие объектов, живущих самостоятельно без ссылок на другие объекты, делает ваш код более подверженным утечкам памяти.На мой взгляд, лучше хранить данные в своем классе Application.

Как уже говорилось, правильное решение зависит от того, как выглядят ваши данные.Если во всех ваших действиях отображаются разные части данных, я бы, вероятно, оставил их в своем подклассе Application.Однако, если ваше приложение структурировано аналогично списку контактов (одно действие для отображения контактов и одно действие для получения подробной информации о контакте), я, вероятно, разместил бы свои данные в основном действии и передал бы только необходимые данные.к моей другой деятельности.

0 голосов
/ 14 ноября 2011

Попробуйте создать объект с помощью

публичный статический объект ....

этот статический объект может использоваться для всех ваших классов, вы можете получить доступ к объекту пока ClassName.objectName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...