2010-10-16 83 views

回答

3

我個人不知道任何簡單的方法來做到這一點。只需在目標活動中再次進行查詢可能會更容易。

+1

我最終這樣做。如果能夠通過光標,會更漂亮。 – dfetter88 2010-10-18 02:27:13

+0

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

1

你應該編寫自己的Cursor來實現Parcelable接口。在這種情況下,您可以將光標放在parcel上並通過putExtra()將其發送到另一個Activity。在目標活動中,你可以爆炸(實際上只需通過處理程序找到它)通過Parcel方法之一(與Binder相關)進行光標遊標。

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(); 

所以,你的第一個活動會從數據庫中獲取,它返回到它作爲一個遊標一些粘粘的任何活動中獲取。此活動將在應用程序中調用setSharedCursor。然後它會啓動第二個Activity,它會在其onCreate函數(或任何其他函數)中調用getSharedCursor來檢索遊標。

+0

但是這種方式你永遠不會在活動之間關閉光標。 – vovahost 2016-02-15 10:41:58

+0

正如vovahost所說,使用這種方法,遊標永遠不會關閉並導致內存泄漏。你可以對此進行編碼,但只需要讓每個活動從數據庫和管理器中讀取遊標狀態(或讓Android執行它)就可以更容易。 – adstro 2016-04-07 15:36:48