这可能吗?我试图在一个活动中打开一个SQLite数据库游标,并将其传递给另一个活动。
答案 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相关)。