0

如何在两个 android 活动之间保持数据更新。我正在开发一个 android 专辑项目,其中主要活动是专辑活动(我可以在其中添加删除和重命名专辑)。但是,当用户单击刚刚创建的其中一个相册时,我会启动一个带有照片活动的意图,他可以在其中添加删除和移动照片。所有操作都在 photoactivity 中为相册完成,我使用序列化将数据写回两个 Activity 中的文本文件。问题是当我从照片活动中退回到主要活动时,对特定相册进行了一些更改。mainactivity 不知道更新。

主要活动中的代码以在用户选择的特定相册上启动照片意图

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

        });

你看我传入了用户对象,它是所有添加删除或移动的相册和照片节点的链表。它基本上是该用户的整个用户数据。因此,每当我启动用户节点的旧引用时,都会将其传递给照片意图。我已经使用序列化实现了 readerUser() 和 writeUser 方法。我需要使用照片活动中的所有更改来更新主活动中用户对象的引用。

4

5 回答 5

1

用于contentProvider提供对照片数据的唯一访问并实施Observer设计模式。也就是说,在一方面,在内部ContentProvider,当数据集由于,或,而改变时insertupdate通知deletecontentResolver另一方面,用户必须通过调用来注册通知 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/观察内容.html

于 2013-05-05T05:33:12.633 回答
0

我认为你需要的是数据库。使用 sqlite http://developer.android.com/reference/android/database/sqlite/package-summary.html

那是猜测您还希望在应用程序第二次运行时保留和恢复数据。

于 2013-05-05T03:34:59.290 回答
0

研究实现一个 Android 应用程序。Application 类本质上为您提供了一个在会话期间保持不变的无 GUI 活动。无需序列化对象(缓慢、过多的开销),您只需在应用程序上调用一个方法即可将图像保存到应用程序中的数据结构中。

使用应用程序意味着您的任何正常活动都可以获得对应用程序单例的引用并访问您公开的任何字段或方法。

阅读官方文档并在 Google 上搜索一些实现示例,其中有很多。

于 2013-05-05T03:29:01.997 回答
0

实现广播接收器。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

于 2013-05-05T05:03:43.127 回答
0

我作为@Vegito1044 在主Activity 中提出了一个本地BroadcastReceiver,可以从其他Activity 触发。与此相关的代码如下所示:

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
    }
}
于 2013-05-05T06:01:42.883 回答