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
Post a Comment