代码之家  ›  专栏  ›  技术社区  ›  nbarraille

Android中的活动交互

  •  1
  • nbarraille  · 技术社区  · 14 年前

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

    • 其中一个活动是“日志”(只是一个显示一堆事件的列表视图)。

    当准备添加新事件时,如何通知日志活动? 另外,我应该在哪里将事件添加到数据库?从Logbook活动,当我将它添加到ListView时,或者从NewEvents活动,只要它准备好了?

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  2
  •   nbarraille    14 年前

    好吧,我找到了怎么做,用一个广播接收器:

    在我的日志活动中,我刚刚设置了一个新的自定义接收器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);   
        }
    

    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"));
        }
    }
    

    到目前为止效果很好,但如果你对此有意见/担忧,请告诉我!

    谢谢您!

        2
  •  1
  •   Bear    14 年前

    如果我正确地回忆起android sdk中包含的记事本项目,它也是在线教程的一部分,这是一个很好的例子,应该可以满足您的需求。

        3
  •  0
  •   Rich    14 年前

    如果您的事件位于全局的某个位置,所有活动都可以与之交互,那么您可以使用模型并从您选择的任何位置和方式显示模型。

    一个简单的建议是使用一个类(EventController或类似的类),该类允许您与事件集合交互,并通过派生的应用程序类使其可用。如果说不通的话,我可以进一步解释。我在我的Android应用程序中使用了一种模式,所有活动类都可以访问一个自定义的全局应用程序实例,因此我的模型是一个模型,可以通过我想访问的任何活动来访问。

        4
  •  0
  •   Vincent Mimoun-Prat Krishnan    14 年前

    一种可能是:

    • ListActivity在每次恢复时获取所有数据,并相应地更新ListView

    您可以进一步改进:

    • ListActivity启动NewEventActivity,预期结果为OK/CANCELLED
    • NewEventActivity完成存储事件的所有工作,并返回一个确定或取消的结果