将光标传递给活动?

时间:2010-10-16 17:40:10

标签: android cursor

这可能吗?我试图在一个活动中打开一个SQLite数据库游标,并将其传递给另一个活动。

3 个答案:

答案 0 :(得分:5)

另一种可能更容易的方法是为您的应用创建一个Application类。这保证只创建一次,并且在应用程序的生命周期内存在。除此之外,它还可以为您的应用程序提供“数据中心”功能,以便不同的活动可以轻松共享数据。所以,对于你的光标,你只需要像这样使用Application类的成员变量(警告,我从我的应用程序中复制了这段代码并在此处进行了编辑,因此无法保证编译。只需要显示这个想法。):

    package com.jcascio.k03;

    import android.app.Application;
    import android.database.Cursor;

// use your application's name instead of "K03Application"

        public class K03Application extends Application { 

        public final String TAG = "K03";

        Cursor sharedCursor; // this cursor can be shared between different Activities

        @Override
        public void onCreate() {
            super.onCreate();
        }

        @Override
        public void onTerminate() {
            super.onTerminate();
        }


        public Cursor getSharedCursor() 
        {
            return this.sharedCursor;
        }

        public void setSharedCursor(Cursor c)
        {
            this.sharedCursor = c;
        }

    }

可以使用

从任何活动中获取应用程序对象
    this.getApplication()

// You cast it to your Application sub-class and call the Cursor accessor function

Cursor c = ((K03Application)this.getApplication()).getSharedCursor();

所以,你的第一个Activity会从数据库中获取一些goo,它将作为Cursor返回给它。此活动将在应用程序中调用setSharedCursor。然后它将启动第二个Activity,它将在其onCreate函数(或任何其他函数)中调用getSharedCursor来检索游标。

答案 1 :(得分:3)

我个人不知道有什么简单的方法可以做到这一点。在目标活动中再次进行查询可能更容易。

答案 2 :(得分:1)

您应该编写自己的Cursor,它将实现Parcelable接口。在这种情况下,您可以将光标放到parcel并通过putExtra()将其发送到另一个Activity。在目标Activity中你可以爆炸(事实上只是通过处理程序找到它)光标通过一个Parcel方法(与Binder相关)。