我有一个包含要显示的数据的ArrayList。内容异步更改。 我想在两个活动中显示数据,两个活动都使用ArrayAdapter(不是同一个类)。
问题是ArrayAdapter通过添加,插入和删除提供同步访问和通知。因此,只能通过一个而不是两个adapers来实现同步访问。
由于使用了不同的视图,因此ArrayAdapter本身不可重复使用。
所以问题是:一个具有多个ArrayAdapter的ArrayList的推荐架构是什么?
更新
我想澄清一下。目前我只有一个ArrayAdapter。
现在我有另一个活动,它也应该显示相同的ArrayList,我不知道该怎么做。显然我需要另一个ArrayAdapter,因为第二个活动有另一个布局。这意味着两个活动和一个服务正在访问同一个ArrayList。 ArrayAdapter的同步还不够,因为锁定在ArrayAdapter中,这意味着如果服务和活动1使用ArrayAdapter 1,ArrayAdapter 2仍将访问和修改ArrayList。
答案 0 :(得分:3)
内容异步更改。
我不确定我是否理解你如何在两个活动之间使用ArrayList。 (静态字段?)
问题是ArrayAdapter取得了数组的所有权(它 重复它)。
我不相信它重复它。它存储对它的引用。 (如果我错了,请纠正我)
激活Activity2并创建ArrayAdapter2时,ArrayList 仍然属于ArrayAdapter1。
此时,两个ArrayAdapter都应该引用相同的ArrayList。这意味着ArrayList中的更改将反映在两个适配器中。
答案 1 :(得分:0)
将一个全局数组适配器用于两个活动,并观察异步数据。
答案 2 :(得分:0)
这不是问题。在通过一个适配器更改arrayList之后,为另一个适配器调用notifyDataSetChanged()。这就是你需要的一切,恕我直言。至少,我的ArrayList与其适配器在不同的Activity中也足够了。然后我“手动”更改它并稍后通知适配器。
如果您想要一个带有两个适配器的 ListView ,则会出现严重问题。但我认为这是一个感觉任务。
更新答案直至更新的问题:
因此,问题不在于不同ArrayAdapter使用相同arraylist的两个活动,而是在使用两个不同arrayadapter的三个组件中。但是,如果您正在使用第二个适配器仅显示相同的列表,就像您在此处所写的那样,则根本不需要任何其他同步。只需在每次重大更改后调用adapter2.notifyDataSetChanged()。
只有通过两个不同的适配器同时进行更改时,才会出现此问题。每个人都不会及时通知另一个人所做的更改。对于可能同时写入的活动之间的同步,您可以通过在每个更改焦点从一个活动到另一个活动之后通知来实现。
但只有在代码中发现相互通知和锁定/解锁的重要点时,才能在service + adapter1和activity + adapter2之间写入同步。