2013-05-05 55 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 
    } 
} 
相关问题