android - Using one adapter for multiple arrays -
i have situation need advice on. have app has expandable list view. each child click sends user next activity, tab layout list view. tab layout has 3 tabs. i'm trying figure out how send data 3 tabs listviews when child clicked on expandable listview.
originally going set in setonchildclicklistener so:
expandablelistview.setonchildclicklistener(new expandablelistview.onchildclicklistener() { @override public boolean onchildclick(expandablelistview parent, view v, int groupposition, int childposition, long id) { if (groupposition == 0) { if (childposition == 0) { mcustomlistviewadapter.addadapteritem(new customobject("squats", "60%", "6", "150", false)); listviewfri.setadapter(mcustomlistviewadapter);
edit: tablayout activity sets 3 tabs. i'm not sure access bundled extras.
public class workoutdaysactivity extends baseactivity { listview listviewfri = (listview) findviewbyid(r.id.listviewfri); listview listviewmon = (listview) findviewbyid(r.id.listviewmon); listview listviewwed = (listview) findviewbyid(r.id.listviewwed); /** * {@link android.support.v4.view.pageradapter} provide * fragments each of sections. use * {@link fragmentpageradapter} derivative, keep every * loaded fragment in memory. if becomes memory intensive, * may best switch * {@link android.support.v4.app.fragmentstatepageradapter}. */ private sectionspageradapter msectionspageradapter /** * {@link viewpager} host section contents. */ private viewpager mviewpager; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.workout_days); bundle extras = getintent().getbundleextra("args"); mtoolbar = activatetoolbarwithhomeenabled(); setupnavigationdrawer(); // create adapter return fragment each of 3 // primary sections of activity. msectionspageradapter = new sectionspageradapter(getsupportfragmentmanager()); // set viewpager sections adapter. mviewpager = (viewpager) findviewbyid(r.id.container); mviewpager.setadapter(msectionspageradapter); tablayout tablayout = (tablayout) findviewbyid(r.id.tabs); tablayout.setupwithviewpager(mviewpager); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_workout_days, 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); } /** * placeholder fragment containing simple view. */ public static class placeholderfragment extends fragment { /** * fragment argument representing section number * fragment. */ private static final string arg_section_number = "section_number"; public placeholderfragment() { } /** * returns new instance of fragment given section * number. */ public static placeholderfragment newinstance(int sectionnumber) { placeholderfragment fragment = new placeholderfragment(); bundle args = new bundle(); args.putint(arg_section_number, sectionnumber); fragment.setarguments(args); return fragment; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { switch (getarguments().getint(arg_section_number)) { case 1: view rootview = inflater.inflate(r.layout.fragment_workout_days, container, false); bundle extras = getarguments(); customobject objects = (customobject) extras.getserializable("w29w1"); return rootview; case 2: view rootview2 = inflater.inflate(r.layout.fragment_sub_page1, container, false); textview textview2 = (textview) rootview2.findviewbyid(r.id.textview2); textview2.settext("workout 29 week 1"); return rootview2; case 3: view rootview3 = inflater.inflate(r.layout.fragment_sub_page2, container, false); textview textview3 = (textview) rootview3.findviewbyid(r.id.txtfrag3); textview3.settext(getstring(r.string.section_format, getarguments().getint(arg_section_number))); return rootview3; default: view rootview4 = inflater.inflate(r.layout.fragment_workout_days, container, false); textview textview4 = (textview) rootview4.findviewbyid(r.id.txtfrag1); textview4.settext(getstring(r.string.section_format, getarguments().getint(arg_section_number))); return rootview4; } } } /** * {@link fragmentpageradapter} returns fragment corresponding * 1 of sections/tabs/pages. */ public class sectionspageradapter extends fragmentpageradapter { public sectionspageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int position) { // getitem called instantiate fragment given page. // return placeholderfragment (defined static inner class below). return placeholderfragment.newinstance(position + 1); } @override public int getcount() { // show 3 total pages. return 3; } @override public charsequence getpagetitle(int position) { switch (position) { case 0: return "monday"; case 1: return "wednesday"; case 2: return "friday"; } return null; } } }
i thought go in part so:
switch (getarguments().getint(arg_section_number)) { case 1: view rootview = inflater.inflate(r.layout.fragment_workout_days, container, false); bundle extras = getarguments(); customobject objects = (customobject) extras.getserializable("w29w1"); customlistviewadapter customlistviewadapter = new customlistviewadapter(this, objects);
but im getting error under (this, objects) saying "cannot applied .placeholderfragment .custom object" "placeholderfragment cannot converted context"
this put in onchildclick:
bundle extras = new bundle(); final arraylist<customobject> objects = new arraylist<customobject>(); objects.add(new customobject("squat", "65%", "6", "150", false)); extras.putserializable("w29w1", objects); intent intent = new intent(getapplicationcontext(), workoutdaysactivity.class); intent.putextra("args", extras); startactivity(intent);
thanks help! please let me know if need see of code better understand i'm trying do!
i'm having difficulty understanding question completely, here's thoughts far.
are attempting set same instance of list adapter on each list? if want same general behaviour, tie different data list, sure instantiating new adapter instances each list.
i.e.
mylist1.setadapter(new myadapter()); mylist2.setadapter(new myadapter());
rather than
myadapter myadapter = new myadapter(); mylist1.setadapter(myadapter); mylist2.setadapter(myadapter);
additionally, wise move data through intents when communicating activity. in initial activity, when action prompts launching next activity, put extras intent before calling startactivity()
. then, inside next activity, call getintent().getxxxextra("...")
xxx
type-matched extracting, , ...
correct key placed on in previous activity.
if using fragments contained in activities, make use of fragment.setarguments()
(in activity2) , fragment.getarguments()
(in fragment2) pass extras fragment1 activity2 fragment2.
passing extras around when click item , want launch new activity (a new view display), approach bundle information needed, pass new activity, unwrap information , apply views desire.
for example...
@override public boolean onchildclick(expandablelistview parent, view v, int groupposition, int childposition, long id) { if (groupposition == 0) { if (childposition == 0) { bundle extras = new bundle(); // put extras need. can primitives int, boolean, double, or complex objects using serializable interface // example, customobject implements serializable customobject customobject = new customobject("squats", "60%", "6", "150", false); extras.putserializable("object_key_here", customobject); intent intent = new intent(getcontext(), nextactivityhere.class); intent.putextra("args", extras); startactivity(intent); } }
in activity containing fragment contains list:
// in oncreate() bundle extras = getintent.getbundleextra("args"); myfragment myfragment = new myfragment(); myfragment.setarguments(extras); // use fragment manager add fragment view
in fragment (myfragment) containing list:
// in oncreate() bundle extras = getarguments(); customobject customobject = (customobject) extras.getserializable("object_key_here"); // can use object set adapter, etc...
hopefully helps @ least show how data original activity fragment containing list. see myself passing arraylist of data if i'm going populating list. without knowing scenario, it's difficult more specific.
Comments
Post a Comment