【问题标题】:How to swap between map fragment and list fragment in android while updating both fragments with AsyncTask如何在使用 AsyncTask 更新两个片段时在 android 中的地图片段和列表片段之间进行交换
【发布时间】:2013-02-18 07:35:37
【问题描述】:

我在使用 MapView 时执行此操作的策略非常简单,但我现在正在过渡到 Android Maps v2 并且必须使用 MapFragment。我的场景涉及获取事件列表,然后我需要在后台对这些事件进行地理解码以获取它们的纬度和经度,以计算与用户的距离并放置到地图上。我有一个操作栏按钮,允许用户在列表和地图片段之间切换,但我的问题是如何将两个片段保存在内存中并避免它们的生命周期,以便我可以在更新列表适配器时不断向地图片段添加标记在列表片段中?

目前我用 FragmentTransaction.replace 用每个 Fragment 替换 FrameLayout,但这会导致另一个被破坏,而我只是希望它被隐藏(在我简单地将 MapView 可见性设置为 View.GONE 之前)。

编辑

我的代码最终是:

@Override
    public void swapFragments() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        if (listFragment.isVisible()) {
            transaction.hide(listFragment);
            if (mapFragment.isAdded()) {
                transaction.show(mapFragment);
            } else {
                transaction.add(R.id.root, mapFragment);
            }
        } else {
            transaction.hide(mapFragment);
            transaction.show(listFragment);
        }
        transaction.commit();
    }

【问题讨论】:

    标签: android android-fragments android-maps android-maps-v2


    【解决方案1】:

    我一直在做类似的事情。我所做的是在我的主要FragmentActivity 的onCreate() 部分中创建两个片段——然后基于 onclick 操作,我显示和隐藏适当的片段。在我提交隐藏 listFragment 之前,我通过添加到后堆栈来补充这一点,这样当用户按下回时,他们将再次获得列表,而不是之前的活动。

    但是,目前,由于某种原因,我无法让 GoogleMap 在我的 MapFragment 中不为空。

    我解决了这个问题——你可以在这里找到类似的答案MapFragment Error - CameraUpdateFactory is not initialized

    【讨论】:

    • 感谢您的回答。使用显示/隐藏是正确的做法。
    • 此外,在 MapFragment 中的 onActivityCreated() 似乎发生之前,无法检索 GoogleMap,因此我在该部分之后使用回调来完成我的工作。如果您需要,我可以显示代码。
    • 是的,我的代码并没有完全反映这一点,但我也注意到了这一点。对任何人使用我的代码的另一个警告是轮换不能正常工作,但是通过保存实例状态来解决这个问题应该不会太难。
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多