java - How to access the Navigation Drawer Header Items? -
this question has answer here:
- navigationview get/find header layout 4 answers
i need sign in googlesignin button , name of user show textview in header of navigation bar(the activity created template android studio in gallery of activities not implemented me), got error told me have nullpointerexception in textview ... don't know why ? 1- here's problem.. error screenshot
activity_main.xml
<include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.navigationview android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitssystemwindows="true" app:headerlayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.drawerlayout> nav_header_main.xml
<imageview android:id="@+id/photoimageview" android:layout_width="70dp" android:layout_height="60dp" android:paddingtop="@dimen/nav_header_vertical_spacing" app:srccompat="@android:drawable/sym_def_app_icon" /> <textview android:id="@+id/nametextview" android:text="namehere" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingtop="@dimen/nav_header_vertical_spacing" android:textappearance="@style/textappearance.appcompat.body1" /> <textview android:id="@+id/emailtextview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android.studio@android.com" /> mainactivity.java
public class mainactivity extends appcompatactivity implements navigationview.onnavigationitemselectedlistener, googleapiclient.onconnectionfailedlistener { imageview photoimageviewe; textview nametextview, emailtextview, txt3ady; private googleapiclient googleapiclient; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); //drawer inflater drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); actionbardrawertoggle toggle = new actionbardrawertoggle( this, drawer, toolbar, r.string.navigation_drawer_open, r.string.navigation_drawer_close); drawer.setdrawerlistener(toggle); toggle.syncstate(); navigationview navigationview = (navigationview) findviewbyid(r.id.nav_view); navigationview.setnavigationitemselectedlistener(this); nametextview = (textview) findviewbyid(r.id.nametextview); emailtextview = (textview) findviewbyid(r.id.emailtextview); photoimageviewe = (imageview) findviewbyid(r.id.photoimageview); //google signin googlesigninoptions gso = new googlesigninoptions.builder(googlesigninoptions.default_sign_in) .requestemail() .build(); googleapiclient = new googleapiclient.builder(this) .enableautomanage(this,this) .addapi(auth.google_sign_in_api,gso) .build(); }//end oncreate public void logout(view view){ auth.googlesigninapi.signout(googleapiclient).setresultcallback(new resultcallback<status>() { @override public void onresult(@nonnull status status) { if (status.issuccess()) { gologinscreen(); } else { toast.maketext(getapplicationcontext(), "not_signed_out", toast.length_short).show(); } } }); }//end logout() public void revoke(view view) { auth.googlesigninapi.revokeaccess(googleapiclient).setresultcallback(new resultcallback<status>() { @override public void onresult(@nonnull status status) { if (status.issuccess()){ gologinscreen(); } else{ toast.maketext(getapplicationcontext(),"not_revoke",toast.length_short).show(); } } }); }//end revoke() @override protected void onstart() { super.onstart(); optionalpendingresult<googlesigninresult> op = auth.googlesigninapi.silentsignin(googleapiclient); if (op.isdone()) { googlesigninresult result = op.get(); handlesigninresults(result); } else { op.setresultcallback(new resultcallback<googlesigninresult>() { @override public void onresult(@nonnull googlesigninresult googlesigninresult) { handlesigninresults(googlesigninresult); } }); }//end else }//end onstart() private void handlesigninresults(googlesigninresult result) { if (result.issuccess()) { //////here////////////////////////////////////// googlesigninaccount account = result.getsigninaccount(); assert account != null; nametextview.settext(account.getdisplayname()); //emailtextview.settext(account.getemail()); //glide.with(this).load(account.getphotourl()).into(photoimageviewe); }//end if else { gologinscreen(); }//end else }//end handlesigninresults() private void gologinscreen() { intent intent = new intent(this,loginactivity.class); intent.addflags(intent.flag_activity_clear_top | intent.flag_activity_clear_task | intent.flag_activity_new_task); startactivity(intent); }//end gologinscreen //end google signin @override public void onbackpressed() { drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); if (drawer.isdraweropen(gravitycompat.start)) { drawer.closedrawer(gravitycompat.start); } else { super.onbackpressed(); } }//end onbackpressed @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(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } @suppresswarnings("statementwithemptybody") @override public boolean onnavigationitemselected(menuitem item) { // handle navigation view item clicks here. int id = item.getitemid(); if (id == r.id.nav_camera) { // handle camera action } else if (id == r.id.nav_gallery) { } else if (id == r.id.nav_slideshow) { } else if (id == r.id.nav_manage) { } else if (id == r.id.nav_share) { } else if (id == r.id.nav_send) { } drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); drawer.closedrawer(gravitycompat.start); return true; } @override public void onconnectionfailed(@nonnull connectionresult connectionresult) { toast.maketext(getapplicationcontext(),"no internet", toast.length_long).show(); } }//end class main activity loginactivity.java google signin button initialization
public class loginactivity extends appcompatactivity implements googleapiclient.onconnectionfailedlistener { private googleapiclient googleapiclient; private signinbutton signinbutton; public static final int sign_in_code = 123; //unique code used show result @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_log_in); googlesigninoptions googlesigninoptions = new googlesigninoptions.builder(googlesigninoptions.default_sign_in) .requestemail() .build(); googleapiclient = new googleapiclient.builder(this) .enableautomanage(this/*this activity*/, this/*who hear if goes wrong*/) .addapi(auth.google_sign_in_api,googlesigninoptions) .build(); signinbutton = (signinbutton) findviewbyid(r.id.signin_button); signinbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = auth.googlesigninapi.getsigninintent(googleapiclient); startactivityforresult(intent,sign_in_code); } });//end click listner }//end oncreate //this method excecuted when goes wrong in connection @override public void onconnectionfailed(@nonnull connectionresult connectionresult) { toast.maketext(this, "no internet",toast.length_short).show(); }//end method onconnectionfailed @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if ( requestcode == sign_in_code ){ googlesigninresult result = auth.googlesigninapi.getsigninresultfromintent(data); handlesigninresult(result); } }//end onactivityresult method private void handlesigninresult(googlesigninresult result) { if (result.issuccess()){ gomainscreen(); } else{ toast.maketext(this, "mahmmoud not successed", toast.length_short).show(); } }//end handlesigninresult() method private void gomainscreen() { intent intent = new intent(this, mainactivity.class); intent.addflags(intent.flag_activity_clear_top | intent.flag_activity_clear_task | intent.flag_activity_new_task); startactivity(intent); toast.maketext(this, "signed in succeeded",toast.length_short).show(); }//end method gomainscreen() }//end class loginactivity notice: login_activity.java doesn't have problem , works, problem how these info google button , put on navigation drawer header menu's textview(just name) , others (email-photo)
you need inflate header view not inflated automatically .
view header = mnavigationview.getheaderview(0); mnametextview = (textview) header.findviewbyid(r.id.nametextview); mnametextview.settext("xyz");
Comments
Post a Comment