分离时不会破坏SupportMapFragment视图

时间:2013-08-13 17:34:55

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

我有两个标签(片段)的布局第一个标签是一个简单的ListFragment。第二个选项卡是一个扩展SupportMapFragment的片段。当我单击第二个选项卡然后重新单击原始选项卡时,我有一个重绘问题(请参见屏幕截图)。这不会发生我使用常规片段而不是SupportMapFragment。以下是包含两个选项卡的父活动的代码:

public class MainActivity extends ActionBarActivity {

private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Notice that setContentView() is not used, because we use the root
    // android.R.id.content as the container for each fragment      

    // Set up the action bar.
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab1 = actionBar.newTab()
            .setText(R.string.title_routes_list)
            .setTag(R.string.title_routes_list)
            .setTabListener(new TabListener<RoutesListFragment>(
                    this, getString(R.string.title_routes_list), RoutesListFragment.class));
    actionBar.addTab(tab1);

    Tab tab2 = actionBar.newTab()
            .setText(R.string.title_routes_map)
            .setTag(R.string.title_routes_map)
            .setTabListener(new TabListener<RoutesMapFragment>(
                    this, getString(R.string.title_routes_map), RoutesMapFragment.class));
    actionBar.addTab(tab2);

    //GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Restore the previously serialized current tab position.
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getSupportActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // Serialize the current tab position.
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getSupportActionBar()
            .getSelectedNavigationIndex());
}

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

    public TabListener(ActionBarActivity activity, String tag, Class<T> clz) {
        this(activity, tag, clz, null);
    }

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

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Fragment preInitializedFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        if (preInitializedFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(), null);
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(preInitializedFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        Fragment preInitializedFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        if (preInitializedFragment != null) {
            ft.detach(preInitializedFragment);
        } else if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }
  }
}

enter image description here

0 个答案:

没有答案