Sunday, 15 May 2011

android - Fragment UI's using navigation drawer -



android - Fragment UI's using navigation drawer -

so have navigation drawer functionality in mainactivity of project, , have nav drawer links linked fragment, don't know how add together ui that. things findviewbyid(r.id.code), , trying set textview's give me errors unreachable code here have far.

mainactivity

bundle yc.android.yourchallenger; import android.app.activity; import android.app.fragment; import android.app.fragmentmanager; import android.content.res.configuration; import android.os.bundle; import android.support.v4.app.actionbardrawertoggle; import android.support.v4.widget.drawerlayout; import android.view.menuitem; import android.view.view; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.arrayadapter; import android.widget.listview; public class mainactivity extends activity { private string [] mnavigationdraweritemtitles; private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; private charsequence mdrawertitle; private charsequence mtitle; public void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mnavigationdraweritemtitles = getresources().getstringarray(r.array.navigation_drawer_items_array); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.left_drawer); // set adapter list view mdrawerlist.setadapter(new arrayadapter<string>(this, r.layout.nav_drawer, mnavigationdraweritemtitles)); // set list's click listener mdrawerlist.setonitemclicklistener((onitemclicklistener) new draweritemclicklistener()); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawertoggle = new actionbardrawertoggle( this, /* host activity */ mdrawerlayout, /* drawerlayout object */ r.drawable.ic_launcher, /* nav drawer icon replace 'up' caret */ r.string.drawer_open, /* "open drawer" description */ r.string.drawer_close /* "close drawer" description */ ) { /** called when drawer has settled in closed state. */ public void ondrawerclosed(view view) { super.ondrawerclosed(view); getactionbar().settitle(mtitle); } /** called when drawer has settled in open state. */ public void ondraweropened(view drawerview) { super.ondraweropened(drawerview); getactionbar().settitle(mdrawertitle); } }; // set drawer toggle drawerlistener mdrawerlayout.setdrawerlistener(mdrawertoggle); getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); // sync toggle state after onrestoreinstancestate has occurred. mdrawertoggle.syncstate(); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); mdrawertoggle.onconfigurationchanged(newconfig); } @override public boolean onoptionsitemselected(menuitem item) { // pass event actionbardrawertoggle, if returns // true, has handled app icon touch event if (mdrawertoggle.onoptionsitemselected(item)) { homecoming true; } // handle other action bar items... homecoming super.onoptionsitemselected(item); } private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { selectitem(position); } } private void selectitem(int position) { fragment fragment = null; switch (position){ case 0: fragment = new createfragment(); break; case 1: fragment = new readfragment(); break; case 2: fragment = new helpfragment(); break; default: break; } /* bundle args = new bundle(); args.putint("key", position); fragment.setarguments(args);*/ if(fragment != null){ fragmentmanager fragmentmanager = getfragmentmanager(); fragmentmanager.begintransaction() .replace(r.id.content_frame, fragment) .commit(); // highlight selected item, update title, , close drawer mdrawerlist.setitemchecked(position, true); settitle(mnavigationdraweritemtitles[position]); mdrawerlayout.closedrawer(mdrawerlist); } } @override public void settitle(charsequence title){ mtitle = title; getactionbar().settitle(mtitle); } }

and here 1 of fragments bundle yc.android.yourchallenger;

import android.app.fragment; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; public class readfragment extends fragment { public readfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_create, container, false); textview view = findviewbyid(r.id.view); homecoming rootview; }

}

there no reason create view created in oncreateview() static (re: droidy). phone call getview() anywhere within fragment lifecycle after oncreateview().

in example, needed change

textview view = findviewbyid(r.id.view);

to

textview view = (textview) rootview.findviewbyid(r.id.view);

you can phone call findviewbyid(int) on viewgroup find it's children. calling in activity convenience method uses view set in setcontentview().

so if wanted find view later in fragment lifecycle, you'd like:

@override public void onactivitycreated(bundle savedinstancestate) { textview view = (textview) getview().findviewbyid(r.id.view); }

you can instantiate views in onviewcreated(view view, bundle savedinstancestate), root view first parameter.

android user-interface android-fragments

No comments:

Post a Comment