在不同活动或碎片之间共享数据的正确方法是什么?

时间:2014-11-20 06:39:36

标签: android listview gridview android-fragments android-viewpager

我需要一个应该具有UI工作流程的应用程序,其中用户应该能够浏览应用程序的特定部分,该部分可以是ListView或GridView,并且他可以点击某个项目以显示该细节特别项目。现在,如果用户向右滑动“ie ViewPager“View寻呼机应更改片段以显示上一个列表中的下一个或上一个项目,具体取决于用户滑动的方向,当用户按下详细的项目视图时,应关闭现有的ViewPager以及之前的ListView或应显示GridView,并且应将View的位置设置为用户在ViewPager中查看的项目。

为了保持简单和高效,两个视图,即ListView和方法应该读取和写入相同的数据结构,它们应该同步,以便当在一个屏幕上启动加载更多数据时,同时如果用户选择一个特定项目,下一个视图应该在上一个屏幕加载完成后自动更新数据。

enter image description here

就像Fancy9gag

一样

编辑:我不想维护数据库,只需要访问数据,直到我的应用程序处于活动状态。

1 个答案:

答案 0 :(得分:0)

Android使用Bundle提供从String值到各种Parcelable类型的映射。

对于活动: -

Intent in = new Intent(Sender.this, Receiver.class); 
in.putString(key, value)
startActivity(in);

For Fragment使用Bundle: -

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);

根据您的方案进行编辑:我认为更好的选择是创建ApplicationPool。

按照以下步骤操作: -  启动ApplicationPool: -

ApplicationPool pool = ApplicationPool.getInstance();

修改详细信息页面上的数据并添加到池

pool.put("key", object);

从池中获取列表页面上的修改数据

Object  object = (Object) pool.get("key");

重要说明: - 获取数据后通知列表视图或gridview

ApplicationPool类文件

public class ApplicationPool {

    private static ApplicationPool instance;
    private HashMap<String, Object> pool;

    private ApplicationPool() {
        pool = new HashMap<String, Object>();
    }

    public static ApplicationPool getInstance() {

        if (instance == null) {
            instance = new ApplicationPool();

        }

        return instance;
    }

    public void clearCollectionPool() {
        pool.clear();
    }

    public void put(String key, Object value) {
        pool.put(key, value);
    }

    public Object get(String key) {
        return pool.get(key);
    }

    public void removeObject(String key) {

        if ((pool.get(key)) != null)
            pool.remove(key);

    }
}