java - Accessing layout components on fragments in activity? -


i changed activity_main.xml layout in 3 tabs using fragments. want access tab components in mainactivity, did before, nullpointersexception. doing wrong here. thanks!

my fragment code:

import android.app.fragment; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.edittext;  public class fragment3 extends fragment {      edittext textbox;      @override     public view oncreateview(layoutinflater inflater, viewgroup container,             bundle savedinstancestate) {          view view = inflater.inflate(r.layout.logbook_view, null);          return view;     }    } 

code third layout tab:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent" >     <button android:layout_width="wrap_content"         android:layout_height="wrap_content"          android:text="send request"         android:onclick="onsendbuttonclicked" />     <edittext         android:id="@+id/edittext1"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:hint="write request.."         android:ems="10" />  </linearlayout> 

parts of mainactivity code:

@suppresslint("newapi") public class mainactivity extends activity implements tablistener {     relativelayout rl;       edittext textbox;     static int x;      /** called when activity first created. */     @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          textbox = (edittext)findviewbyid(r.id.edittext1);          try {             rl = (relativelayout) findviewbyid(r.id.mainlayout);              fragmenttra = getfragmentmanager().begintransaction();             actionbar bar = getactionbar();             bar.addtab(bar.newtab().settext("info").settablistener(this));             bar.addtab(bar.newtab().settext("pilot").settablistener(this));             bar.addtab(bar.newtab().settext("logbook").settablistener(this));              bar.setdisplayoptions(actionbar.display_show_custom                     | actionbar.display_use_logo);             bar.setnavigationmode(actionbar.navigation_mode_tabs);             bar.setdisplayshowhomeenabled(true);             bar.setdisplayshowtitleenabled(false);             bar.show();          } catch (exception e) {             e.getmessage();         }         /**          * hiding action bar          */     }      fragment1 fram1;     fragmenttransaction fragmenttra = null;     fragment2 fram2;     fragment3 fram3;       /*     @override     public boolean oncreateoptionsmenu(menu menu) {         getmenuinflater().inflate(r.menu.activity_main, menu);         return true;     }*/      @override     public void ontabreselected(tab tab, fragmenttransaction ft) {     }      @override     public void ontabselected(tab tab, fragmenttransaction ft) {          if (tab.gettext().equals("info")) {             try {                 rl.removeallviews();             } catch (exception e) {             }             fram1 = new fragment1();             fragmenttra.addtobackstack(null);             fragmenttra = getfragmentmanager().begintransaction();             fragmenttra.add(rl.getid(), fram1);             fragmenttra.commit();         } else if (tab.gettext().equals("pilot")) {             try {                 rl.removeallviews();             } catch (exception e) {             }             fram2 = new fragment2();             fragmenttra.addtobackstack(null);             fragmenttra = getfragmentmanager().begintransaction();             fragmenttra.add(rl.getid(), fram2);             fragmenttra.commit();         } else if (tab.gettext().equals("logbook")) {             try {                 rl.removeallviews();             } catch (exception e) {             }             fram3 = new fragment3();             fragmenttra.addtobackstack(null);             fragmenttra = getfragmentmanager().begintransaction();             fragmenttra.add(rl.getid(), fram3);             fragmenttra.commit();         }      }      @override     public void ontabunselected(tab tab, fragmenttransaction ft) {      }      public void onsendbuttonclicked(view view) {          textbox.settext("some text on third tab edittext");     } 

logcat:

05-06 12:42:19.993: e/androidruntime(29991): fatal exception: main 05-06 12:42:19.993: e/androidruntime(29991): java.lang.illegalstateexception: not execute method of activity 05-06 12:42:19.993: e/androidruntime(29991):    @ android.view.view$1.onclick(view.java:3103) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.view.view.performclick(view.java:3574) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.view.view$performclick.run(view.java:14293) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.os.handler.handlecallback(handler.java:605) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.os.handler.dispatchmessage(handler.java:92) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.os.looper.loop(looper.java:137) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.app.activitythread.main(activitythread.java:4441) 05-06 12:42:19.993: e/androidruntime(29991):    @ java.lang.reflect.method.invokenative(native method) 05-06 12:42:19.993: e/androidruntime(29991):    @ java.lang.reflect.method.invoke(method.java:511) 05-06 12:42:19.993: e/androidruntime(29991):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:823) 05-06 12:42:19.993: e/androidruntime(29991):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:590) 05-06 12:42:19.993: e/androidruntime(29991):    @ dalvik.system.nativestart.main(native method) 05-06 12:42:19.993: e/androidruntime(29991): caused by: java.lang.reflect.invocationtargetexception 05-06 12:42:19.993: e/androidruntime(29991):    @ java.lang.reflect.method.invokenative(native method) 05-06 12:42:19.993: e/androidruntime(29991):    @ java.lang.reflect.method.invoke(method.java:511) 05-06 12:42:19.993: e/androidruntime(29991):    @ android.view.view$1.onclick(view.java:3098) 05-06 12:42:19.993: e/androidruntime(29991):    ... 11 more 05-06 12:42:19.993: e/androidruntime(29991): caused by: java.lang.nullpointerexception 05-06 12:42:19.993: e/androidruntime(29991):    @ com.example.colibri2bbui.mainactivity.onsendbuttonclicked(mainactivity.java:201) 05-06 12:42:19.993: e/androidruntime(29991):    ... 14 more 

the way doing 'tab' implementation totally wrong. first of all, should use framelayout parent view add/replace fragments. second thing logic in ontabselected should changed. here example proper way use tab navigation in actionbar.

first create main.xml, fragments added/attached :

<?xml version="1.0" encoding="utf-8"?> <framelayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/fragment_container"     android:layout_width="match_parent"     android:layout_height="match_parent" /> 

second can create tabs , add tablistener them :

mmyactionbar.setnavigationmode(actionbar.navigation_mode_tabs);  actionbar.tab mfirsttab = mmyactionbar.newtab(); mfirsttab.settext("first tab"); mfirsttab.settablistener(this); mmyactionbar.addtab(mfirsttab);  actionbar.tab msecondtab = mmyactionbar.newtab(); msecondtab.settext("second tab"); msecondtab.settablistener(this); mmyactionbar.addtab(msecondtab);  actionbar.tab mthirdtab = mmyactionbar.newtab(); mthirdtab.settext("third tab"); mthirdtab.settablistener(this); mmyactionbar.addtab(mthirdtab); 

and create tablistener :

public void ontabselected(tab tab, fragmenttransaction ft) {     // check if fragment initialized     if (mfirsttab == null) {         // if not, instantiate , add activity         mfirsttab = fragment.instantiate(mactivity, mclass.getname());         ft.add(android.r.id.content, mfirsttab, mtag);     } else {         // if exists, attach in order show         ft.attach(mfirsttab);     } }  public void ontabunselected(tab tab, fragmenttransaction ft) {     if (mfirsttab != null) {         // detach fragment, because 1 being attached         ft.detach(mfirsttab);     } }  public void ontabreselected(tab tab, fragmenttransaction ft) {     // user selected selected tab. nothing. } 

and nullpointerexception in code, can see edittext : textbox = (edittext)findviewbyid(r.id.edittext1); trying use in mainactivity declared in third's tab layout. edittext should declared , used in fragment3, not in mainactivity .

hope answer you!


Comments