2013-05-05 94 views
0

如何保持兩個android活動之間的數據更新。我正在製作一個安卓專輯項目,其中主要活動是專輯活動(我可以添加刪除和重命名專輯)。但是,當用戶點擊剛剛創建的其中一張專輯時,我開始了一個有照片活動的意圖,他可以添加刪除和移動照片。所有的操作都是針對Photoactivity中的相冊完成的,我使用序列化將數據寫回到兩個活動中的文本文件中。問題是,當我從照片活動中退出主要活動並對特定專輯進行某些更改時。主要活動不知道更新。保持數據在android中的兩個活動之間更新

代碼在主活動啓動由用戶

albumGridView.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       //Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 

       Intent photoIntent = new Intent(MainActivity.this, Photo.class); 
       photoIntent.putExtra("userNode", user); 

       photoIntent.putExtra("position", position); 
       startActivity(photoIntent); 

      // Toast.makeText(MainActivity.this, position, Toast.LENGTH_SHORT).show(); 
      } 

     }); 

你看我通過在用戶對象,它是它增加了刪除或移動所有相冊和照片的節點linkedlists選擇的特定相冊中的照片的意圖。它基本上是該用戶的全部用戶數據。所以無論何時我開始將用戶節點的舊引用傳遞給照片意圖。我已經使用序列化實現了readerUser()和writeUser方法。我需要保持主要活動中的用戶對象的參考更新以及照片活動中的所有更改。

回答

0

考慮實施Android應用程序。應用程序類實際上爲您提供了無GUI的活動,在會話期間保持不變。您可以在應用程序中調用一個方法來將圖像保存到應用程序中的數據結構中,而不是序列化對象(緩慢,額外的開銷)。

使用應用程序意味着您的任何常規活動都可以獲取對應用程序單例的引用並訪問您公開的任何字段或方法。

閱讀官方的doc,並做一個谷歌搜索的一些實施例,其中有很多。

1

使用contentProvider提供獨特的訪問您的照片數據和實施Observer設計模式。即,在上側上,該ContentProvider,當數據集改變由於insertupdate,或delete,通知內部的contentResolver;在另一側上,用戶通過調用getContentResolover().registerContentObserver

退房那些註冊的通知鏈接:

http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/reference/android/content/ContentResolver.html http://mylifewithandroid.blogspot.com/2008/03/observing-content.html

0

我作爲@ Vegito1044提出了可以從其他活動中引發的主要活動當地廣播接收器。相關的代碼如下所示:

public class AlbumActivity extends Activity { 
    private BroadcastReceiver myReceiver = null; 

    class _AlbumUpdateReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive (Context context, Intent intent) { 
      Log.i(Global.LOG_CONTEXT, "AlbumActivity.onReceive(intent='" + intent + "')"); 
      reloadGui(); 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (myReceiver == null) 
     { 
      myReceiver = new _AlbumUpdateReceiver(); 
      IntentFilter filter = new IntentFilter(Global.REFRESH_GUI); 
      registerReceiver(myReceiver, filter); 
     } 

     reloadGui(); 
    } 

    @Override 
    public void onPause() { 

     if (myReceiver != null) 
     { 
      unregisterReceiver(myReceiver); 
      myReceiver = null; 
     } 

     super.onPause(); 
    } 

    void reloadGui() 
    { 
     Log.d(Global.LOG_CONTEXT, "AlbumActivity.refreshGui()"); 
     ... do what is neccessary to update gui 
    } 
} 
相關問題