簡體   English   中英

在方向更改時重新創建SupportMapFragment

[英]SupportMapFragment get recreated on orientation change

我正在創建一個簡單的應用程序,在選項卡中使用谷歌地圖,在其他地方使用其他東西。 問題是當我改變方向時會重新創建地圖,所以我轉到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) {
    }
}

肖像面向剛果附近

景觀定位於latlng(0,0)

采用

setRetainInstance(true);

在MapFragment的onCreate方法中

我遇到了同樣的問題,這個問題,甚至它的答案都幫助了我。

但我確實遇到了問題:

  • 谷歌地圖(問題:清除/刷新)
  • 使用AsyncTask運行ProgressDialog(問題:崩潰)
  • 對話(問題:取消)

因此,為了解決所有這些問題,我在每個活動中添加了以下代碼。

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

它對我有用,所以雖然它也會對其他人有所幫助,因為它是一個常見的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM