Android 在不同的活动或片段之间共享数据的正确方式是什么?
我需要一个应用程序,应该有一个UI工作流,用户应该能够浏览应用程序的特定部分,可以是ListView或GridView,他可以点击一个项目,以显示该特定项目的详细信息。现在如果用户向右滑动“即ViewPager”查看页面应根据用户的滑动方向更改片段,以显示上一列表中的下一个或上一个项目,此外,当用户按下详细项目视图时,应关闭现有的ViewPager,并显示上一个ListView或GridView,并且应将视图的位置设置为用户在ViewPager中查看的项目 为了保持简单高效,两个视图(即ListView和方法)应读写到相同的数据结构,并且它们应同步,以便在一个屏幕上启动加载更多数据时,同时如果用户选择特定项目,则下一个视图应在加载后自动更新数据在上一屏幕中完成 就像或Android 在不同的活动或片段之间共享数据的正确方式是什么?,android,listview,gridview,android-fragments,android-viewpager,Android,Listview,Gridview,Android Fragments,Android Viewpager,我需要一个应用程序,应该有一个UI工作流,用户应该能够浏览应用程序的特定部分,可以是ListView或GridView,他可以点击一个项目,以显示该特定项目的详细信息。现在如果用户向右滑动“即ViewPager”查看页面应根据用户的滑动方向更改片段,以显示上一列表中的下一个或上一个项目,此外,当用户按下详细项目视图时,应关闭现有的ViewPager,并显示上一个ListView或GridView,并且应将视图的位置设置为用户在ViewPager中查看的项目 为了保持简单高效,两个视图(即List
编辑:我不想维护数据库,我只需要在我的应用程序进程处于活动状态之前访问数据。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接受我没有实现多线程,因为它可能会影响应用程序的性能,这是根据我的需要。