android - working with fragments of sliding tab layout -


greeting.... new android , making app displays map route on in 1 tab , navigation instructions route in tab.... followed tutorial sliding tab layout done 3 tabs.. had displayed map route in separate app ..now want display in second tab ...

do have associate separate activity each fragment achieve , if how that

i tried work on map in tab2 fragment stuck in achieving getting null in googlemap object when trying initialize getmap()....

my main activity code :

package com.example.rafaqatrasool.optiroute;  import android.os.bundle; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmenttransaction; import android.support.v4.view.viewpager; import android.support.v7.app.actionbaractivity; import android.support.v7.widget.toolbar; import android.view.menu; import android.view.menuitem;   public class mainactivity extends actionbaractivity {       // declaring view , variables      toolbar toolbar;     viewpager pager;     viewpageradapter adapter;     slidingtablayout tabs;     charsequence titles[]={"home","map","directions"};     int numboftabs =3;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);            // creating toolbar , setting toolbar activity          toolbar = (toolbar) findviewbyid(r.id.tool_bar);         setsupportactionbar(toolbar);            // creating viewpageradapter , passing fragment manager, titles fot tabs , number of tabs.         adapter =  new viewpageradapter(getsupportfragmentmanager(),titles,numboftabs);          // assigning viewpager view , setting adapter         pager = (viewpager) findviewbyid(r.id.pager);         pager.setadapter(adapter);          // assiging sliding tab layout view         tabs = (slidingtablayout) findviewbyid(r.id.tabs);         tabs.setdistributeevenly(true); // make tabs fixed set true, makes tabs space evenly in available width          // setting custom color scroll bar indicator of tab view         tabs.setcustomtabcolorizer(new slidingtablayout.tabcolorizer() {             @override             public int getindicatorcolor(int position) {                 return getresources().getcolor(r.color.tabsscrollcolor);             }         });          // setting viewpager slidingtabslayout         tabs.setviewpager(pager);      }        @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.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();          //noinspection simplifiableifstatement         if (id == r.id.action_settings) {             return true;         }          return super.onoptionsitemselected(item);     } } 

my viewpageradaper code

package com.example.rafaqatrasool.optiroute;   import android.support.v4.app.fragment; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmentstatepageradapter;  /**  * created rafaqat rasool on 5/26/2015.  */ public class viewpageradapter extends fragmentstatepageradapter {      charsequence titles[]; // store titles of tabs going passed when viewpageradapter created     int numboftabs; // store number of tabs, passed when viewpageradapter created       // build constructor , assign passed values appropriate values in class     public viewpageradapter(fragmentmanager fm, charsequence mtitles[], int mnumboftabsumb) {         super(fm);          this.titles = mtitles;         this.numboftabs = mnumboftabsumb;      }      //this method return fragment every position in view pager     @override     public fragment getitem(int position) {          if (position == 0) // if position 0 returning first tab         {             tab1 tab1 = new tab1();             return tab1;         }else if(position == 1){             tab2 tab2 = new tab2();             return tab2;          }         else             // having 3 tabs if position 1 must 2 returning third tab         {             tab3 tab3 = new tab3();             return tab3;         }       }      // method return titles tabs in tab strip      @override     public charsequence getpagetitle(int position) {         return titles[position];     }      // method return number of tabs tabs strip      @override     public int getcount() {         return numboftabs;     } } 

the code second tab want work on map

package com.example.rafaqatrasool.optiroute;  import android.app.dialog; import android.os.bundle; import android.support.annotation.nullable; import android.support.v4.app.fragment; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup;  import com.google.android.gms.common.connectionresult; import com.google.android.gms.common.googleplayservicesutil; import com.google.android.gms.maps.googlemap; import com.google.android.gms.maps.supportmapfragment;   /**  * created rafaqat rasool on 5/26/2015.  */ public class tab2 extends fragment {      googlemap googlemap;     @override     public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) {          view v = inflater.inflate(r.layout.tab_2, container, false);          return v;     }      @override     public void onactivitycreated(@nullable bundle savedinstancestate) {         super.onactivitycreated(savedinstancestate);         // getting google play availability status         int status = googleplayservicesutil.isgoogleplayservicesavailable(getactivity().getbasecontext());          // showing status         if(status!= connectionresult.success){ // google play services not available              int requestcode = 10;             dialog dialog = googleplayservicesutil.geterrordialog(status, getactivity(), requestcode);             dialog.show();          }else if(googlemap == null){             log.d("in on activity created ","looking fragment");             googlemap= ((supportmapfragment) getactivity().getsupportfragmentmanager().findfragmentbyid(r.id.map)).getmap();         }         if(googlemap!=null) googlemap.setmylocationenabled(true);     } } 

here null in googlemap object when intialized getmap()

googlemap= ((supportmapfragment) getactivity().getsupportfragmentmanager().findfragmentbyid(r.id.map)).getmap();             } 

logcat :

05-31 09:01:44.357    9546-9546/com.example.rafaqatrasool.optiroute e/androidruntime﹕ fatal exception: main     process: com.example.rafaqatrasool.optiroute, pid: 9546     java.lang.nullpointerexception: attempt invoke virtual method 'com.google.android.gms.maps.googlemap com.google.android.gms.maps.supportmapfragment.getmap()' on null object reference             @ com.example.rafaqatrasool.optiroute.tab2.onactivitycreated(tab2.java:47)             @ android.support.v4.app.fragment.performactivitycreated(fragment.java:1797)             @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:979)             @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1138)             @ android.support.v4.app.backstackrecord.run(backstackrecord.java:740)             @ android.support.v4.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1501)             @ android.support.v4.app.fragmentmanagerimpl.executependingtransactions(fragmentmanager.java:490)             @ android.support.v4.app.fragmentstatepageradapter.finishupdate(fragmentstatepageradapter.java:163)             @ android.support.v4.view.viewpager.populate(viewpager.java:1072)             @ android.support.v4.view.viewpager.populate(viewpager.java:918)             @ android.support.v4.view.viewpager.onmeasure(viewpager.java:1440)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1436)             @ android.widget.linearlayout.measurevertical(linearlayout.java:722)             @ android.widget.linearlayout.onmeasure(linearlayout.java:613)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.framelayout.onmeasure(framelayout.java:436)             @ android.support.v7.internal.widget.contentframelayout.onmeasure(contentframelayout.java:124)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1436)             @ android.widget.linearlayout.measurevertical(linearlayout.java:722)             @ android.widget.linearlayout.onmeasure(linearlayout.java:613)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.framelayout.onmeasure(framelayout.java:436)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1436)             @ android.widget.linearlayout.measurevertical(linearlayout.java:722)             @ android.widget.linearlayout.onmeasure(linearlayout.java:613)             @ android.view.view.measure(view.java:17547)             @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:5535)             @ android.widget.framelayout.onmeasure(framelayout.java:436)             @ com.android.internal.policy.impl.phonewindow$decorview.onmeasure(phonewindow.java:2615)             @ android.view.view.measure(view.java:17547)             @ android.view.viewrootimpl.performmeasure(viewrootimpl.java:2015)             @ android.view.viewrootimpl.measurehierarchy(viewrootimpl.java:1173)             @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1379)             @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1061)             @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5885)             @ android.view.choreographer$callbackrecord.run(choreographer.java:767)             @ android.view.choreographer.docallbacks(choreographer.java:580)             @ android.view.choreographer.doframe(choreographer.java:550)             @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:753)             @ android.os.handler.handlecallback(handler.java:739)             @ android.os.handler.dispatchmessage(handler.java:95)             @ android.os.looper.loop(looper.java:135)             @ android.app.activitythread.main(activitythread.java:5254)             @ java.lang.reflect.method.invoke(native method)             @ java.lang.reflect.method.invoke(method.java:372)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903)             @ com.android.internal.os.zygoteinit.main(zygoteinit. 05-31 09:01:54.805    9546-9546/com.example.rafaqatrasool.optiroute i/process﹕ sending signal. pid: 9546 sig: 9 

the xml of tab 2

<?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">       <fragment xmlns:android="http://schemas.android.com/apk/res/android"         android:id="@+id/map"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:name="com.google.android.gms.maps.supportmapfragment"/>   </relativelayout> 

i searched lot in google , frustrated , came here ... new android , don't have idea how fix ...

**please me **

well if have not found issue, not initialize property of fragment in onactivitycreated method. long possible avoid using method onactivitycreated in code. if property interface implemented activity initialization in onattach method. in case, suggest use framelayout instead of fragment tag , add google map dynamically in oncreateview method after inflating view. should use view.findviewbyid , replace view fragment. should see fragment lifecycle better understanding.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -