Java 如果我刷过两个标签,为什么Android会重新创建我的Google MapFragment?[浏览网页]
好的,我的应用程序中有三个选项卡: 表1、表2和表3 表3包含我在亚洲设置的精确位置的MapFragment。当我从选项卡3滑动到选项卡2,然后再滑动回选项卡3时,一切正常。但如果我滑动到选项卡3,返回到选项卡1,然后返回到选项卡3,所有内容都将完全重置,我的自定义位置也将重置。是什么导致了这个问题?任何帮助都将不胜感激。这是我的密码:Java 如果我刷过两个标签,为什么Android会重新创建我的Google MapFragment?[浏览网页],java,android,google-maps,android-viewpager,Java,Android,Google Maps,Android Viewpager,好的,我的应用程序中有三个选项卡: 表1、表2和表3 表3包含我在亚洲设置的精确位置的MapFragment。当我从选项卡3滑动到选项卡2,然后再滑动回选项卡3时,一切正常。但如果我滑动到选项卡3,返回到选项卡1,然后返回到选项卡3,所有内容都将完全重置,我的自定义位置也将重置。是什么导致了这个问题?任何帮助都将不胜感激。这是我的密码: public class MapViewActivity extends Fragment implements OnItemSelectedL
public class MapViewActivity extends Fragment implements
OnItemSelectedListener {
// Google Map
private GoogleMap googleMap;
private Spinner spinner;
private View view;
private static final LatLng KABUL = new LatLng(34.31, 69.11);
@Override
public void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
if (googleMap == null) {
googleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
// Look up the AdView as a resource and load a request.
AdView adView = (AdView) getActivity().findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
setRetainInstance(true);
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.map_layout, container, false);
try {
// Loading map
initilizeMap();
} catch (Exception e) {
e.printStackTrace();
}
spinner = (Spinner) view.findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
// Create an ArrayAdapter using the string array and a default spinner
// layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getActivity().getBaseContext(), R.array.map_type_array,
android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
// Inflate the layout for this fragment
return view;
}
@Override
public void onDestroyView() {
Fragment f = (Fragment) getFragmentManager().findFragmentById(R.id.map);
if (f != null) {
getFragmentManager().beginTransaction().remove(f).commit();
}
super.onDestroyView();
}
/**
* function to load map. If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((SupportMapFragment) getFragmentManager()
.findFragmentById(R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Crouton.makeText(getActivity(), "Unable to create map",
Style.ALERT).show();
}
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setScrollGesturesEnabled(false);
Marker Kabul = googleMap.addMarker(new MarkerOptions()
.position(KABUL));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(KABUL, 6));
}
}
@Override
public void onStart() {
super.onStart();
EasyTracker.getInstance(getActivity()).activityStart(getActivity()); // Add
// this
// method.
}
@Override
public void onStop() {
super.onStop();
EasyTracker.getInstance(getActivity()).activityStop(getActivity()); // Add
// this
// method.
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
String itemSelected = parent.getItemAtPosition(position).toString();
System.out.println(itemSelected);
if (itemSelected.equalsIgnoreCase("Normal")) {
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
if (itemSelected.equalsIgnoreCase("Satellite")) {
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
}
if (itemSelected.equalsIgnoreCase("Terrain")) {
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
}
if (itemSelected.equalsIgnoreCase("Hybrid")) {
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
}
因为默认情况下,ViewPager只存储两个
片段。
设置更多以正确工作:
viewPager.setOffscreenPageLimit(3);
你用的是哪一个寻呼机?试试这个:因为它可以保存页面。@ItzikSamara是的,我用的就是这个@伊齐克萨马拉让我发布包含它的类的代码。它成功了!非常感谢你!!!!我为此挣扎了好几天。你是一个救生员:丹乔伊你的检查伙伴:)更好的做法是,如果碎片已经打开,就不要重新创建它。正在检查savedInstanceState==null
viewPager.setOffscreenPageLimit(3);