Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在不同的活动或片段之间共享数据的正确方式是什么?_Android_Listview_Gridview_Android Fragments_Android Viewpager - Fatal编程技术网

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

Android 在不同的活动或片段之间共享数据的正确方式是什么?,android,listview,gridview,android-fragments,android-viewpager,Android,Listview,Gridview,Android Fragments,Android Viewpager,我需要一个应用程序,应该有一个UI工作流,用户应该能够浏览应用程序的特定部分,可以是ListView或GridView,他可以点击一个项目,以显示该特定项目的详细信息。现在如果用户向右滑动“即ViewPager”查看页面应根据用户的滑动方向更改片段,以显示上一列表中的下一个或上一个项目,此外,当用户按下详细项目视图时,应关闭现有的ViewPager,并显示上一个ListView或GridView,并且应将视图的位置设置为用户在ViewPager中查看的项目 为了保持简单高效,两个视图(即List

我需要一个应用程序,应该有一个UI工作流,用户应该能够浏览应用程序的特定部分,可以是ListView或GridView,他可以点击一个项目,以显示该特定项目的详细信息。现在如果用户向右滑动“即ViewPager”查看页面应根据用户的滑动方向更改片段,以显示上一列表中的下一个或上一个项目,此外,当用户按下详细项目视图时,应关闭现有的ViewPager,并显示上一个ListView或GridView,并且应将视图的位置设置为用户在ViewPager中查看的项目

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

就像或


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

Android使用Bundle提供从字符串值到各种可包裹类型的映射

关于活动:-

Intent in = new Intent(Sender.this, Receiver.class); 
in.putString(key, value)
startActivity(in);
对于片段使用包:-

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
为您的场景编辑:我认为更好的选择是创建应用程序池

请按照以下步骤操作:- 启动应用程序池:-

ApplicationPool pool = ApplicationPool.getInstance();
修改“详细信息”页面上的数据并添加到池中

pool.put("key", object);
从池中获取列表页上修改的数据

Object  object = (Object) pool.get("key");
重要提示:-获取数据后通知listview或gridview

应用程序池类文件

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

    }
}
公共类应用程序池{
私有静态应用程序池实例;
私有HashMap池;
专用应用程序池(){
pool=newhashmap();
}
公共静态应用程序池getInstance(){
if(实例==null){
实例=新的应用程序池();
}
返回实例;
}
公共无效clearCollectionPool(){
pool.clear();
}
公共void put(字符串键、对象值){
pool.put(键、值);
}
公共对象获取(字符串键){
返回池。get(键);
}
public void removeObject(字符串键){
if((pool.get(key))!=null)
池。移除(键);
}
}

我认为您必须将列表或网格活动中的数据传递给ViewPager活动,而不仅仅是id,并使用数据库从id中获取数据,因此列表中显示的信息在ViewPager中应该保持不变,并且当列表或网格活动中的数据更新时,也会在ViewPager中显示更新。@Hareshchelana如果OP有数据库,如果他只是想加载数据并只在应用程序实例激活之前使用它呢?哪种方法更有意义?是的,但如果用户更改了数据的细节片段,该怎么办?它应该反映回listView中。如何保持数据同步?@Tech_Intelliswift:你的方法基本上是一个单件,它包装了一个Hashmap并提供对它的访问,我在想,为什么你会建议它而不是Android的应用程序对象?与使用应用程序对象相比,您的方法是否有一些好处?@ArifNadeem应用程序类用于保存android应用程序的状态,不应用于存储应用程序数据,Singleton是一种实现模式。是的,您的实现是一个没有多线程规定的Singleton。@ArifNadeem接受我没有实现多线程,因为它可能会影响应用程序的性能,这是根据我的需要。