gpt4 book ai didi

java - 从另一个 fragment 返回时,主 Activity 中的 map fragment 不可见

转载 作者:行者123 更新时间:2023-12-01 11:30:14 25 4
gpt4 key购买 nike

我在主 Activity 中使用抽屉导航。主 Activity 保存 map fragment ,在抽屉导航上选择 SettingsFragment 时,应该显示 fragment 。该 fragment 会显示,但当我从抽屉中选择另一个项目时, map 会显示出来。不显示fragment,仅显示设置fragment的布局。

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();

顺便说一句。 contentd_frame 只是一个拼写错误吗?在您的布局文件中,它显示内容t_frame。

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

检查this answer关于如何使用MapView。

关于java - 从另一个 fragment 返回时,主 Activity 中的 map fragment 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com