Android: findViewById returns Null even if is after setContentView -


here's code in loginactivity:

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_login);      if (savedinstancestate == null) {         getsupportfragmentmanager().begintransaction()                 .add(r.id.container, new placeholderfragment()).commit();     }      loginbutton = (button)findviewbyid(r.id.loginbutton);      loginbutton.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             onloginbuttonclicked();         }     });      // check if there logged in user     // , linked facebook account.     parseuser currentuser = parseuser.getcurrentuser();     if ((currentuser != null) && parsefacebookutils.islinked(currentuser)) {         // go main activity         showhomeactivity();     } } 

in fragment_login.xml

<button     android:id="@+id/loginbutton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerhorizontal="true"     android:layout_centervertical="true"     android:text="@string/login_button" /> 

and log when run application:

e/androidruntime(6647): fatal exception: main e/androidruntime(6647): process: com.moostachestudio.drinkitapp, pid: 6647 e/androidruntime(6647): java.lang.runtimeexception: unable start activity componentinfo{com.moostachestudio.drinkitapp/com.moostachestudio.drinkitapp.loginactivity}: java.lang.nullpointerexception e/androidruntime(6647):     @ android.app.activitythread.performlaunchactivity(activitythread.java:2195) e/androidruntime(6647):     @ android.app.activitythread.handlelaunchactivity(activitythread.java:2245) e/androidruntime(6647):     @ android.app.activitythread.access$800(activitythread.java:135) e/androidruntime(6647):     @ android.app.activitythread$h.handlemessage(activitythread.java:1196) e/androidruntime(6647):     @ android.os.handler.dispatchmessage(handler.java:102) e/androidruntime(6647):     @ android.os.looper.loop(looper.java:136) e/androidruntime(6647):     @ android.app.activitythread.main(activitythread.java:5017) e/androidruntime(6647):     @ java.lang.reflect.method.invokenative(native method) e/androidruntime(6647):     @ java.lang.reflect.method.invoke(method.java:515) e/androidruntime(6647):     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:779) e/androidruntime(6647):     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:595) e/androidruntime(6647):     @ dalvik.system.nativestart.main(native method) e/androidruntime(6647): caused by: java.lang.nullpointerexception e/androidruntime(6647):     @ com.moostachestudio.drinkitapp.loginactivity.oncreate(loginactivity.java:45) e/androidruntime(6647):     @ android.app.activity.performcreate(activity.java:5231) e/androidruntime(6647):     @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) e/androidruntime(6647):     @ android.app.activitythread.performlaunchactivity(activitythread.java:2159) e/androidruntime(6647):     ... 11 more 

the problem "loginbutton" null don't know why, because call findviewbyid after setcontentview!

it seems button in fragment layout, your on click method might in fragment (placeholderfragment) instead of activity. need declare class extends fragment..

first, create new class named placeholderfragment. extend fragment , add code below it:

@override public view oncreateview(layoutinflater inflater, viewgroup container,     bundle savedinstancestate) {     view rootview = inflater.inflate(r.layout.fragment_login, container, false);     // ...     loginbutton = (button) rootview.findviewbyid(r.id.loginbutton);     loginbutton.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             onloginbuttonclicked();         }     });     // ...     return rootview; }    // put method onloginbuttonclicked here. 

then, layout activity mainactivity (named activity_main) might have framelayout id container this:

<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=".mainactivity" >      <!-- other views -->  </framelayout>   

finally, mainactivity have:

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      if (savedinstancestate == null) {         // add fragment here in id container         getsupportfragmentmanager().begintransaction()              .add(r.id.container, new placeholderfragment()).commit();     }      // ... without loginbutton     // , more stuff } 

Comments

Popular posts from this blog

php - Magento - Deleted Base url key -

javascript - Tooltipster plugin not firing jquery function when button or any click even occur -

java - WrongTypeOfReturnValue exception thrown when unit testing using mockito -