将光标传递给活动?

问题描述:

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

我个人不知道任何简单的方法来做到这一点。只需在目标活动中再次进行查询可能会更容易。

+1

我最终这样做。如果能够通过光标,会更漂亮。 – dfetter88 2010-10-18 02:27:13

+0

@ dfetter88 +1我同意... – Mirko 2012-10-22 08:28:55

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

另一种可能更简单的方法是为您的应用程序创建一个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(); 

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

+0

但是这种方式你永远不会在活动之间关闭光标。 – vovahost 2016-02-15 10:41:58

+0

正如vovahost所说,使用这种方法,游标永远不会关闭并导致内存泄漏。你可以对此进行编码,但只需要让每个活动从数据库和管理器中读取游标状态(或让Android执行它)就可以更容易。 – adstro 2016-04-07 15:36:48