从主活动访问活动中的适配器和其他数据

时间:2016-02-12 23:52:46

标签: java android android-activity android-adapter

我想知道在活动之间访问非原始数据的正确方法是什么。虽然关于这个主题有很多问题和答案,但我仍然认为我的问题还没有被提出。

1)主要活动显示自定义适配器ToDoListAdapterToDoManagerActivityloadItems()saveItems()onPause()中的方法onResume()public class ToDoManagerActivity extends ListActivity { toDoListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new ToDoListAdapter(ToDoManagerActivity.this); ..... } } 中的条目加载数据:

TodoChartActivity

2)另一个活动ToDoListAdaptermAdapter视图触发,是一个显示所有条目的活动,但不同。为了显示条目,我需要主活动中适配器变量中的数据。

根据互联网上的消息来源,there are在第二项活动中可以使用适配器变量(或任何其他)的不同方法:

  1. loadItems()公开和静态或为其制作公开的getter& setter。 BAD APPROACH
  2. 从Application Singleton访问它。的 BAD APPROACH
  3. saveItems()复制ToDoManagerActivityWhere,然后将其重新加载到内存中。因为我使用的内存远远超过我实际需要的内容 - BAD APPROACH
  4. 通过intent extras传递一个列表条目的所有数据。有人告诉我, TEDIOUS APPROACH 。另外,让我们想象一下,例如,我们需要所有条目。所以,这是一个普遍的问题。
  5. 您是否有其他建议,如何在活动之间访问复杂对象和列表?

2 个答案:

答案 0 :(得分:0)

ToDoManagerActivity 是您的第一个活动,从这里开始 ToDoListAdapter ,从 ToDoListAdapter 开始 TodoChartActivity

这是常见的情况。由于您的数据相同,只需在适配器上共享即可。

ToDoManagerActivity 传递 ToDoListAdapter 中的对象列表。现在,您在此适配器中拥有数据。现在,将相同的数据传递给 TodoChartActivity

答案 1 :(得分:0)

单身人士不一定是坏方法,除非其内容的有效期比两次活动所使用的时间长。您甚至可以将容器对象放在WeakReference中,以便在使用数据的两个活动不再存在并保持对数据的引用之后收集垃圾。这种方法的主要缺点是,如果需要销毁和重新创建,您的活动就无法保存并保留它们的状态。

您还可以将数据保存到sqlite数据库。如果您不想将所有对象中的所有字段分成sqlite字段,那么您可以“作弊”并将它们序列化为JSON,如Gson那样,如果您的模型数据可以自动执行此过程表示为Java原始类型和基本集合。如果你这样做,那么你的活动也可以从sqlite中持久存储的数据中重建,以防它们被Android销毁。缺点是您现在必须弄清楚何时不再使用数据库中的数据。如果您需要在应用中一次多次使用此方案,则需要能够使用某个ID识别每个数据集合,并确保在活动之间共享ID。