android - getFragmentManager returning null pointer exception -
my getfragmentmanager in function setupmapifneeded() returning null pointer exception
. put fragment separately activity_main.xml, here code :
activity_main.xml :
<framelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.yai.testmap.mainactivity" tools:ignore="mergerootframe" />
updated
fragment_main.xml :
<?xml version="1.0" encoding="utf-8" ?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- mapview--> <com.google.android.gms.maps.mapview android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/map" />
and here *.java file :
updated
package com.yai.testmap; import android.support.v7.app.actionbaractivity; import android.support.v4.app.fragment; import android.os.bundle; import android.view.layoutinflater; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; /* error repport */ import android.util.log; /* import dropdownlist used project */ import android.widget.checkbox; import android.widget.spinner; import android.widget.toast; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.adapterview.onitemselectedlistener; import com.google.android.gms.common.connectionresult; import com.google.android.gms.common.googleplayservicesnotavailableexception; import com.google.android.gms.common.googleplayservicesutil; /* import google map */ import com.google.android.gms.maps.googlemap; import com.google.android.gms.maps.mapfragment; import com.google.android.gms.maps.mapsinitializer; import com.google.android.gms.maps.supportmapfragment; import com.google.android.gms.maps.mapview; /* google map type */ import static com.google.android.gms.maps.googlemap.map_type_hybrid; import static com.google.android.gms.maps.googlemap.map_type_none; import static com.google.android.gms.maps.googlemap.map_type_normal; import static com.google.android.gms.maps.googlemap.map_type_satellite; import static com.google.android.gms.maps.googlemap.map_type_terrain; public class mainactivity extends actionbaractivity implements onitemselectedlistener { private static mapview mmapview; private static mapfragment mmapfragment; private static googlemap mgooglemap; private static checkbox mtrafficcheckbox, mlocationcheckbox, mbuildingcheckbox, mindoorcheckbox; public static class placeholderfragment extends fragment { public placeholderfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_main, container, false); spinner spinner = (spinner) rootview.findviewbyid(r.id.spinneroption); arrayadapter adapter = arrayadapter.createfromresource(getactivity(), r.array.spinner_option_string, android.r.layout.simple_spinner_item); adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner.setadapter(adapter); spinner.setonitemselectedlistener((onitemselectedlistener) getactivity()); mtrafficcheckbox = (checkbox) rootview.findviewbyid(r.id.checkbox_traffic); mlocationcheckbox = (checkbox) rootview.findviewbyid(r.id.checkbox_location); mbuildingcheckbox = (checkbox) rootview.findviewbyid(r.id.checkbox_building); mindoorcheckbox = (checkbox) rootview.findviewbyid(r.id.checkbox_indoor); mapsinitializer.initialize(getactivity()); switch (googleplayservicesutil.isgoogleplayservicesavailable(getactivity()) ) { case connectionresult.success : mmapview = (mapview) rootview.findviewbyid(r.id.map); mmapview.oncreate(savedinstancestate); if(mmapview != null){ mgooglemap = mmapview.getmap(); mgooglemap.getuisettings().setmylocationbuttonenabled(false); mgooglemap.setmylocationenabled(true); } } return rootview; } } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); if (savedinstancestate == null) { getsupportfragmentmanager().begintransaction() .add(r.id.container, new placeholderfragment()).commit(); } setupmapifneeded(); } private void setupmapifneeded(){ if(mgooglemap == null){ //mmapfragment = (mapfragment) getfragmentmanager().findfragmentbyid(r.id.map); mgooglemap = mmapview.getmap(); } } private boolean checkready(){ if(mgooglemap == null){ toast.maketext(this, r.string.map_not_ready, toast.length_short).show(); return false; } return true; } private void updatetraffic(){ if(!checkready()){ return; } mgooglemap.settrafficenabled(mtrafficcheckbox.ischecked()); } public void ontraffictoggled(view view){ updatetraffic(); } private void updatelocation(){ if(!checkready()){ return; } mgooglemap.setmylocationenabled(mlocationcheckbox.ischecked()); } public void onlocationtoggled(view view){ updatelocation(); } private void updatebuilding(){ if(!checkready()){ return; } mgooglemap.setbuildingsenabled(mbuildingcheckbox.ischecked()); } public void onbuildingtoggled(view view){ updatebuilding(); } private void updateindoor(){ if(!checkready()){ return; } mgooglemap.setindoorenabled(mindoorcheckbox.ischecked()); } public void onindoortoggled(view view){ updateindoor(); } @override public void onitemselected(adapterview parent, view view, int position, long id){ setlayer((string) parent.getitematposition(position)); } private void setlayer(string layername){ if(!checkready()){ return; } if(layername.equals(getstring(r.string.normal))){ mgooglemap.setmaptype(map_type_normal); } else if(layername.equals(getstring(r.string.hybrid))){ mgooglemap.setmaptype(map_type_hybrid); } else if(layername.equals(getstring(r.string.satellite))){ mgooglemap.setmaptype(map_type_satellite); } else if(layername.equals(getstring(r.string.terrain))){ mgooglemap.setmaptype(map_type_terrain); } else if(layername.equals(getstring(r.string.none_map))){ mgooglemap.setmaptype(map_type_none); } else{ log.i("lda", "error setting layer name " + layername); } } @override public void onnothingselected(adapterview parent){ } @override protected void onresume() { super.onresume(); setupmapifneeded(); if (mgooglemap != null) { updatetraffic(); updatelocation(); updatebuilding(); updateindoor(); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } }
i've tried use getsupportframentmanager android.support.v4.app.dialogfragment support library :
mgooglemap = ((mapfragment) getsupportfragmentmanager().findfragmentbyid(r.id.map)).getmap();
but still doesn't works. got error eclipse cannot cast fragment mapfragment
. i've tried extend fragmentactivity , still returning null pointer. when i'm tried comment getsupportfragmentmanager in function setupmapifneeded(), error gone.
here logcat :
updated
03-24 20:43:36.124: e/androidruntime(27152): java.lang.runtimeexception: unable start activity componentinfo{com.yai.testmap/com.yai.testmap.mainactivity}: java.lang.nullpointerexception 03-24 20:43:36.124: e/androidruntime(27152): @ com.yai.testmap.mainactivity.setupmapifneeded(mainactivity.java:104) 03-24 20:43:36.124: e/androidruntime(27152): @ com.yai.testmap.mainactivity.oncreate(mainactivity.java:98)
any idea?
the casting problem can solved by
mgooglemap = ((supportmapfragment) getsupportfragmentmanager().findfragmentbyid(r.id.map)).getmap();
if want map inside fragment need use mapview
or need extend supportmapfragment
.
you can refer below
android - android.view.inflateexception: binary xml file line #8: error inflating class fragment
Comments
Post a Comment