【问题标题】:SupportMapFragment get recreated on orientation changeSupportMapFragment 在方向更改时重新创建
【发布时间】:2014-09-29 17:33:47
【问题描述】:

我正在创建一个简单的应用程序,它在选项卡中使用谷歌地图,在其他选项卡中使用其他内容。 问题是当我改变方向时地图会重新创建,所以我去 latlng 0,0

这是我的代码

MainAcitivy.java

private static final String MAP_FRAGMENT_TAG = "map";
private static final String DUMMY_FRAGMENT_TAG = "DUMMY";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Set up the action bar to show tabs.
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    //
    // // For each of the sections in the app, add a tab to the action bar.
    actionBar.addTab(actionBar
        .newTab()
            .setText(R.string.title_section1)
                .setTabListener(
                    new TabListener<SupportMapFragment>(this,
                        MAP_FRAGMENT_TAG, SupportMapFragment.class)));
    actionBar
        .addTab(actionBar
            .newTab()
                .setText(R.string.title_section2)
                    .setTabListener(
                        new TabListener<DummySectionFragment>(this,
                            DUMMY_FRAGMENT_TAG,
                                DummySectionFragment.class)));

}

TabListener.java

public class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag,
    Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (mFragment == null) {
            mFragment = mActivity.getSupportFragmentManager()
                .findFragmentByTag(mTag);
        }
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }
}

【问题讨论】:

  • 好吧,就我而言,问题在于我正在重置活动的onCreate() 中的地图相机。否则,即使没有 setRetainInstance(true)SupportMapFragment 似乎也会在配置更改时保留其 CameraPosition
  • 我不知道为什么会这样,但是 android:configChanges="orientation|screenSize" 现在可以正常工作了
  • 对我来说也很好用 alvaro answer android:configChanges="orientation|screenSize"

标签: android google-maps google-maps-android-api-2


【解决方案1】:

使用

setRetainInstance(true);

在 MapFragment 的 onCreate 方法中

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,这个问题甚至它的答案都帮助了我。

    但我确实遇到了问题:

    • Google 地图(问题:清除/刷新)
    • ProgressDialog 与 AsyncTask 一起运行(问题:崩溃)
    • 对话框(问题:取消)

    为了解决所有这些问题,我在每个活动中添加了以下代码。

    <activity
                android:name="ACTIVITY"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:launchMode="standard"
                android:theme="@android:style/Theme.NoTitleBar"
                android:windowSoftInputMode="stateHidden|adjustPan" />
    

    它对我有用,所以尽管它也会对其他人有所帮助,因为这是一个常见问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2023-03-05
      • 2012-12-29
      相关资源
      最近更新 更多