多个地图片段重叠的问题

时间:2016-11-26 12:05:25

标签: java android google-maps android-fragments

我有一个应用程序,它有一个主要活动和几个片段,通过导航抽屉导航到。

我在我的应用程序中使用了两个地图片段,如果我从片段映射A然后返回到片段映射B,这似乎会导致问题。在frgamnet中我失去了对它们的控制地图通常只是显示了最后一个片段的地图。

这似乎是一个众所周知的问题。

google maps api bug report with issue

我的解决方案就是在上面四分之一时间是在最小化地图A之前加载地图B这导致问题不会发生,因为它不会占用屏幕空间。

public void hideStupidMaps() {
    mMapView.getLayoutParams().height = 1;
    mMapView.getLayoutParams().width = 1;
    mMapView.invalidate();
    mMapView.requestLayout();

}

上面的方法是在我的Gmap片段类中。我想从myMain Activity类中调用它。在导航抽屉代码中。我的问题是如何从主要活动中调用frgments方法。特别是在改变该片段视图时。我需要将视图和它扩展到上面的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以在单个活动中组合多个fragments来构建多窗格UI,并在多个活动中重用片段。片段必须始终嵌入到活动中,片段的生命周期直接受主机活动生命周期的影响。

要从onCreateView()返回布局,可以从XML中定义的布局资源中对其进行充气。为了帮助您这样做,onCreateView()提供了一个LayoutInflater对象。

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

以下是如何将一个片段替换为另一个片段,并保留后栈中的先前状态:

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();