【问题标题】:Sharing items created under itemizedOverlay共享 itemizedOverlay 下创建的项目
【发布时间】:2012-07-20 20:11:24
【问题描述】:

我在 MapView 中使用 itemizedOverlay 来生成航路点。我可以根据需要修改、添加、删除这些航点。这个 MapView 作为一个片段与一个 listView 片段共享屏幕。目前,片段的目的是显示地图中的航点,并允许它们被删除、移动或使用 listFragment 进行任何操作。目前所有这些都有效。

我遇到的问题是两个片段都有自己的航点列表副本。 IE。如果我使用地图视图删除一个航点,itemizedOverlay 类必须调用 ListFragment 函数从它自己的列表中删除一个航点。这变得丑陋,很快就会有自己的问题。最好在 listView、itemizedOverlay 或单独的类文件中有一个列表。

在其他应用程序(基于 C++ 或 Java)中,我通常创建另一个类作为单例,它保存将在地图和列表视图之间共享的信息。在使用 Android 时,这仍然是解决问题的最佳方法,还是有其他更好的内置选项可供使用?

【问题讨论】:

    标签: android android-listview android-fragments android-mapview itemizedoverlay


    【解决方案1】:

    如果您持有对扩展项目Application 类的类的引用,则可以使用列表的单个实例。有关此方法的更多信息,请参阅here

    【讨论】:

    • 你的回答很有效,但是,我被建议最好使对象可包裹。这很简单,最后需要我使用捆绑包将对象传递给片段。我知道这两种方法都很简单,除了 Parcelable 方法有其自身的细微差别,即要求编码器以特定顺序对放置在包裹中的物品进行排序。有更好的选择吗?看来android更喜欢Parcelable。
    • 我认为可行的另一种方法是将您的航点列表引用保存在Activty 中,该Activty 包含您的两个Fragments,并使用get 和set 方法访问您的航点列表。您可以使用getActivity 方法获取Fragment 的关联Activity
    • 我尝试了该方法以及使用应用程序方法。我实际上能够做到这三种方法,但是,我只是不确定哪种方法是最好的/最干净的。
    • 我还没有尝试过 Parceable 方法,但我已经尝试过其他两个建议的方法,所以关于它们,我建议使用将数据保存在 Activity 中的方法,因为这种方式您的数据的生命周期将最长为您的Activity 生命周期,这比其他方法更节省内存。将数据保存在 Application 上下文中的优势在于,只要您有 Context 引用,就可以从应用程序中的任何位置访问它们,它们的生命周期也与您的应用程序生命周期相匹配。我认为你的问题没有明确的答案。
    • 看起来确实如此。我想我会保持我的选择开放,以防我需要从一个或另一个切换。谢谢。
    猜你喜欢
    • 2017-07-07
    • 2015-05-04
    • 2014-08-09
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2013-10-28
    相关资源
    最近更新 更多