【发布时间】:2016-02-12 23:52:46
【问题描述】:
我想知道在活动之间访问非原始数据的正确方法是什么。虽然关于这个话题有很多问题和答案,但我仍然认为我的问题还没有被问到。
1) 主要活动显示自定义适配器ToDoListAdapter。 ToDoManagerActivity 在 onPause() 和 onResume() 的方法 loadItems() 和 saveItems() 中加载条目数据:
public class ToDoManagerActivity extends ListActivity {
toDoListAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = new ToDoListAdapter(ToDoManagerActivity.this);
.....
}
}
2) 另一个活动TodoChartActivity 是从ToDoListAdapter 视图中触发的,它是一个显示所有条目的活动,但方式不同。为了显示条目,我需要主要活动中适配器变量中的数据。
根据互联网上的消息来源,there are 在第二个活动中使适配器变量(或任何其他)可访问的不同方法:
- 将
mAdapter设为 public 和 static 或将其设为 public getter&setter。 糟糕的方法 - 从应用程序单例访问它。 BAD APPROACH
- 从
ToDoManagerActivity复制loadItems()和saveItems()并将它们再次加载到内存中。因为我使用的内存比我实际需要的多得多——糟糕的方法 - 通过 Intent Extras 传递一个列表条目的所有数据。 繁琐的方法,有人告诉我。另外,让我们想象一下,例如,我们需要所有条目。所以,这是一个普遍的问题。
您还有其他建议,如何在活动之间访问复杂的对象和列表?
【问题讨论】:
-
EditTodoActivity的名称表明您正在处理单个待办事项,所以为什么不直接传递它的 id 并让EditTodoActivity加载相关详细信息。或者换句话说,你为什么要通过适配器? -
@soshial,您始终可以通过 Intent 将数据从
ToDoManagerActivity传递到EditToDoActivity。如果要传递自定义对象,请确保它们实现Parcelable接口。 -
我知道,可以通过 Intent Extras 传递一个 ToDoItem 的数据,但我想总的来说。想象一下,每个列表条目都太大而无法像那样传递它。此外,每次都添加和提取额外内容有点乏味。
-
@soshial 这就是为什么你像 Cory 所说的那样传递一个 ID,然后提取相关数据。如果您只想加载一次数据,那么您就会陷入原始问题中提到的不良方法
-
@chaitanya,如果我只将一个 id 传递给第二个活动,那么我从哪里获取所有数据。为此,我需要将第二个活动中的所有数据再次加载到内存中,这在内存方面不是一件好事。这就是为什么访问 mAdapter 变量似乎是更好的选择,综上所述,你怎么看?
标签: java android android-activity android-adapter