Android中的活动互动

时间:2010-11-05 12:51:01

标签: android android-activity

我正在开发一个需要两个活动之间进行交互的应用程序,我不确定实现它的最佳方法是什么:

  • 其中一个活动是“日志”(只是一个显示一系列事件的ListView)。
  • 另一个活动允许用户创建将被发送(并显示在日志中)的事件。

如果准备添加新活动,如何通知我的日志活动? 另外,我应该在哪里将事件添加到数据库?从Logbook Activity中,当我将它添加到ListView,或者从NewEvents Activity添加到它时,它会立即生效吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

好的,我找到了如何使用BroadcastReceiver:

在我的日志活动中,我只是设置了一个新的自定义接收器onCreate():

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

现在,我可以在newEventActivity中进行调用:

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 :(得分:1)

如果我错误地回忆起android sdk中包含的Notepad项目,并且也是在线教程的一部分,这是一个很好的例子,可以满足您的需求。

答案 2 :(得分:0)

借用MV- *(模型 - 视图 - 某些或其他)模式,将您对模型的概念(在本例中为您的事件对象)和显示它们的内容(视图,或者在您的情况下为活动)分开)它会变得更加清晰。

如果您的活动位于全球所有活动可以与之互动的地方,那么您可以使用该模型并从您选择的任何地方显示模型。

一个简单的建议是有一个类(EventController或类似的东西),它允许您与Events集合进行交互,并通过派生的Application类使其可用。如果这没有意义,我可以进一步解释。我有一个我在Android应用程序中使用的模式,所有Activity类都可以访问自定义的全局Application实例,所以我的模型是一个模型,可以通过我想要访问的任何Activity访问。

这只是一种方法,而且一如既往,有许多方法可能适合您的需求。

答案 3 :(得分:0)

一种可能性是:

  • ListActivity每次恢复时都会获取所有数据并相应地更新ListView
  • NewEventActivity完成存储事件的所有工作并完成

你可以多改进一点:

  • ListActivity在启动时获取所有数据
  • ListActivity启动NewEventActivity,期待OK / CANCELED结果
  • NewEventActivity完成存储事件的所有工作并返回结果为OK或CANCELLED
  • 根据从NewEventActivity获取的结果,ListActivity是否重新加载其数据