通过多个屏幕发送数据

时间:2017-12-11 12:45:12

标签: android android-fragments design-patterns

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

3 个答案:

答案 0 :(得分:0)

从Intent传递值有可能导致数据丢失,因此不要使用Intent传递多个值。因此,如果值没有改变,最好从Static类访问这些值。如果有时值正在改变,那么使用Intent传递它们。 您也可以使用SharedPreferences,在您的情况下更加可行。

答案 1 :(得分:0)

您可以转向助焊剂架构。 Redux商店的一种状态管理。 谁需要数据查询来存储。并且数据更改会自动发送给侦听器。

答案 2 :(得分:0)

不会在Activities / Fragments之间传递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
        ...
    }
}