Деятельность по взаимодействию в Android - PullRequest
1 голос
/ 05 ноября 2010

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

  • Одним из действий является «Журнал» (просто ListView, который отображает кучу событий).
  • Другое действие позволяет пользователю создавать события, которые будут отправлены (и отображаются в журнале).

Как мне уведомить мою активность в журнале, когда новое событие готово к добавлению? Кроме того, где я должен добавить событие в базу данных? Из Активности Журнала, когда я добавляю его в ListView или из Активности NewEvents, как только он будет готов?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 05 ноября 2010

Хорошо, я нашел, как это сделать, используя BroadcastReceiver:

В своей активности в журнале я просто настроил новый пользовательский приемник onCreate ():

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logbook);
        registerReceiver(new EventReceiver(this), new IntentFilter("SEND_NEW_EVENT"));

Теперь я могу совершать звонки в своей новой функции EventEvent:

public void sendToLogbook(int eventId){
        Intent i = new Intent("SEND_NEW_EVENT");
        i.putExtra("newEvent", this.newEvents[eventId]);
        sendBroadcast(i);   
    }

Конечно, мне пришлось создать свой класс CustomReceiver и переопределить метод onReceive (), чтобы сделать то, что я хочу:

public class EventReceiver extends BroadcastReceiver {

    private ActivityLogbook activity;

    public EventReceiver(ActivityLogbook activity) {
        this.activity = activity;
    }

    public void onReceive(Context context, Intent i) {
        this.activity.addToReport((Event)i.getParcelableExtra("newEvent"));
    }
}

Пока это прекрасно работает, но если у вас есть замечания / сомнения по этому поводу, пожалуйста, скажите мне!

Спасибо!

1 голос
/ 05 ноября 2010

Если я правильно помню, проект «Блокнот», который включен в Android SDK, а также является частью онлайн-учебников, является хорошим примером, который должен удовлетворить ваши потребности.

0 голосов
/ 05 ноября 2010

Одна возможность будет:

  • ListActivity получает все данные каждый раз, когда они возобновляются, и соответствующим образом обновляет ListView
  • NewEventActivity выполняет всю работу по сохранению события и просто завершает

Вы можете улучшить это немного больше:

  • ListActivity получает все данные при запуске
  • ListActivity запускает NewEventActivity, ожидая результата OK / CANCELED
  • NewEventActivity выполняет всю работу по сохранению события и возвращает результат со словами OK или CANCELED
  • В зависимости от результата, который он получает от NewEventActivity, ListActivity перезагружает свои данные или нет
0 голосов
/ 05 ноября 2010

Чтобы позаимствовать у шаблонов MV- * (Model-View-что-то или другое), разделите ваше представление о модели (в данном случае, об объектах Event) и о том, что их отображает (View или, в вашем случае, Activity).), и это станет более понятным.

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

Одно простое предложение - иметь класс (EventController или что-то в этом роде), который позволяет вам взаимодействовать с коллекцией Events и делать ее доступной через производный класс Application.Я могу объяснить дальше, если это не имеет смысла.У меня есть шаблон, который я использую в своих приложениях Android, в соответствии с которым все классы Activity имеют доступ к пользовательскому глобальному экземпляру Application, поэтому моя модель является моделью, и к ней могут обращаться любые действия, к которым я хочу получить доступ.

Этотолько один подход, и, как всегда, есть множество подходящих для вас нужд.

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