繁体   English   中英

从另一个片段返回时,主活动中的映射片段不可见

[英]Map fragment in main activity not visible when returning from another fragment

我在main活动中使用导航抽屉。main活动包含地图片段,并在导航抽屉中选择SettingsFragment时应显示片段。片段会显示出来,但是当我从抽屉中选择另一个项目时地图片段不会显示显示时,仅显示设置片段的布局。

main_activity.java

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

        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

}

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        selectItem(position);
    }
}

private void selectItem(int position) {

    Fragment fragment = null;

    switch (position) {
        case 0:
            Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
            if (location == null)
              LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
            else
              handleNewLocation(location);
            break;
        case 1:
              output_locations(dataFromAsyncTask);
            break;
        case 2:
            /*fragment is called here */
            fragment = new SettingsFragment();
            break;
       default:
           break;
       }

    if (fragment != null) {
        Bundle data = new Bundle();
        fragment.setArguments(data);
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(osArray[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
        }
    else{
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(osArray[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

}

activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
tools:context=".MainActivity" >

<!-- The main content view -->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/content_frame">
    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment"
        tools:layout="@layout/activity_main" />
</FrameLayout>

<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#fff"/>

SettingsFragment.java类

public class SettingsFragment extends Fragment {

public SettingsFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View Settings_view = inflater.inflate(R.layout.settings_fragment, container, false);

    return Settings_view;
} 
}

settings_fragment.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="@color/background_material_light">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="40px"
    android:textColor="#ffffff"
    android:layout_gravity="center"
    android:id="@+id/detail"/>

试图解决这个问题几天...

您正在用SettingsFragment替换MapFragment,并且(到目前为止)它无法恢复。

fragmentManager.beginTransaction().replace(R.id.contend_frame, fragment).commit();

顺便说一句。 d _frame只是错字吗? 在您的布局文件,它说conten 牛逼 _frame。

我的建议是将MapFragment(使用MapView)放到自己的布局中,将Fragment-class放到activity_main中,并在启动时加载该片段。 因此,您可以在需要时再次显示它。 (例如,通过popBackStack或用它替换SettingsFragment)。

检查有关如何使用MapView的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM