我在尝试更改Android应用程序中的GoogleMap类型时遇到了麻烦。我有一个基本的操作栏菜单,当我在操作栏中选择正确的选项时,我希望在我的活动中将地图放置为片段。这是我的代码:
package com.example.where2go;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
private MahMapFrag mapFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
initializeMap();
} catch (Exception e) {e.printStackTrace();}
}
private boolean initializeMap() {
if (mapFragment == null) {
mapFragment = new MahMapFrag();
// check if map is created successfully or not
try{
if (mapFragment == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
return false;
}
else {
Log.d("MLOGS", "Map Intitialized");
return true;
}
} catch(Exception e) {
e.printStackTrace();
}
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_map:
getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit();
break;
default:
return false;
}
return true;
}
}
这是我扩展MapFragment的类:
package com.example.where2go;
import android.util.Log;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
public class MahMapFrag extends MapFragment {
public MahMapFrag() {
Log.d("MLOGS", "CONSTRUCT");
//this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);
}
}
当行
this.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);
被评论,应用程序(似乎)运行顺利。但是当该行被取消注释时,如果我尝试在构造函数中更改地图的类型,当我点击我的操作栏时,应用程序崩溃
getFragmentManager().beginTransaction().replace(android.R.id.content,mapFragment).commit();
。
我在com.where2go.MainActivity.onOptionItemSelected
处有一个空指针异常。在设置地图类型时,我已经尝试了几个小时来弄清楚为什么我的mapFragment为null。
有人可以给我一个关于这个问题的线索和/或解释吗?我真的很想理解,因为我觉得我错过了一些对于进一步的android开发至关重要的事情....
我使用安装了Google Play服务的eclipse Juno和Genymotion,并使用API 19进行编译。
谢谢
Qoya
答案 0 :(得分:0)
确保你正在使用我发现帮助mah Case。 (参考你的MahMapFrag大声笑)
fragmentManager = getSupportFragmentManager();
将此添加到您的xml
<fragment
android:id="@+id/location_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />