【问题标题】:Sending data in through multiple screens通过多个屏幕发送数据
【发布时间】:2017-12-11 12:45:11
【问题描述】:

在我的应用程序中,在特定屏幕上有 Arraylist,它是回收站视图的来源。该屏幕上有许多按钮可将您带到下一个屏幕,下一个屏幕可能是单个普通活动或具有视图寻呼机和标签布局的活动,并且该片段可能包含将您带到下一个屏幕的按钮。在某些屏幕中,我可以编辑歌曲类场也。我的问题是我很困惑是否通过意图将列表发送到下一个屏幕和进一步的下一个片段或下一个屏幕,或者我应该将其设为静态并在任何地方访问它。我必须一次又一次地包裹包装然后解开然后将其发送到片段然后包装片段然后解开它然后将其发送到附加到片段的adpater,这是一个漫长的过程,我担心任何人都可以在任何屏幕上更改该列表其次,每次发送意图和接收意图时,整个过程都很麻烦。

【问题讨论】:

  • 好的,你应该使用偏好。当您发送或更新任何想法时,最后,您将优先保存并使用它。
  • 分享你的代码。
  • @Jackey Kabra 你想将该代码存储在共享首选项中并每次都获取它吗?
  • 整个类大哪个,你特别想要的部分代码
  • 我读过使用静态是不好的做法,这可能会导致内存泄漏,所以应该使用静态列表吗?

标签: android android-fragments design-patterns


【解决方案1】:

从 Intent 传递值有可能导致数据丢失,因此不要使用 Intent 传递多个值。因此,如果值没有变化,最好从静态类访问值。如果有时值会发生变化,请使用 Intent 传递这些值。 您也可以使用 SharedPreferences,这在您的情况下会更可行。

【讨论】:

    【解决方案2】:

    您可以转向通量架构。 Redux 存储类的状态管理。 谁需要数据查询来存储。并且数据更改会自动分派给侦听器。

    【讨论】:

    • 这在反应类型语言中是否更相关,它是否适合正常的 andorid 架构
    【解决方案3】:

    SharedPreferences 不用于在活动/片段之间传递数据。它们在这里存储应用程序关闭时需要保留的数据。

    一个选项可能是使用某种“缓存”类来存储您的数据。因此,假设您在第一个屏幕上显示您想要的任何数据的列表,然后用户选择其中一个项目以查看详细信息/修改它。所以你把这个数据的位置(在缓存中存储的数组中)给你的下一个片段,这个下一个片段要求缓存根据它收到的位置给它数据。

    示例

    缓存类

    public class Cache{
        List<Object> data;
    
        // ... Implementation
    
        public List<Object> getData(){
           return this.data;
        }
        public setData(List<Object> data){
           this.data = data;
        }   
    
        public Object getObject(int position){
           return data.get(position);
        }
    }
    

    列出活动

    public class ListDataActivity extends ListActivity{
    
        public void onCreate(...){
            // get the data
            ...
            // Set the data to the cache
            Cache.getInstance().setData(data);
            // Display the list
            ...
        }
    
        public void onItemClicked(...){
            Intent intent =....
            intent.put(ITEM_POSITION, pos);
            startActivity(intent);
        }
    }
    

    详情活动

    public class DetailsActivity extends Activity{
    
        public void onCreate(...){
            //...
            // get data from the cache
            int pos  = getIntent.getInt(ITEM_POSITION);
            Object obj = Cache.getInstance().getObject(pos);
            // Display the details
            ...
        }
    }
    

    【讨论】:

    • 使用静态列表有什么危害?
    • 可能有不同的实现方式。但通常我更喜欢使用分离的类/对象来管理组件之间共享的数据。但它可以是单例或使用静态变量的类。就我个人而言,我更喜欢第一种方法,特别是因为我目前正在使用 Dagger 2,您可以在其中定义范围,因此它会生成像只保留在应用程序的定义部分中的单例。但是我说的是不要使用 SharedPreferences 作为临时缓存,我没有提到静态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多