Sunday 15 March 2015

java - How do I communicate between ListFragment and DialogFragment where the DialogFragment is invoked via the options menu of list fragment? -



java - How do I communicate between ListFragment and DialogFragment where the DialogFragment is invoked via the options menu of list fragment? -

i have class "listfrag" implementing listfragment , within class, have nested static dialogfragment class "sortdialogfragment" invoked through 1 of options in options menu. purpose of dialog provide user set of options on how want list sorted. able display dialog fine , user able take option. however, not sure how refresh listview without having access listview's "notifydatasetchanged" method dialogfragment class, 1 time user has made choice. know communicating between 2 fragments through underlying activity using interface not clear how apply technique in particular case. not sure define interface , implement interface. please bear me since newbie android developer , site, in terms of posting questing. below modified code, including relevant code:

public class listfrag extends sherlocklistfragment { private listfraglistener mylistener; private databaseadapter database; private arraylist<myobject> listitems; private view layout; private button confirmbtn; private button cancelbtn; private boolean isdeleteactive; private boolean isexportactive; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // todo auto-generated method stub layout = inflater.inflate(r.layout.list_frag, container, false); homecoming layout; } @override public void onactivitycreated(bundle savedinstancestate) { // todo auto-generated method stub super.onactivitycreated(savedinstancestate); database = databaseadapter.getinstance(getactivity()); database.open(); listitems = database.getmyobjects(); database.close(); sethasoptionsmenu(true); registerforcontextmenu(this.getlistview()); final myadapter listadapter = new myadapter(getactivity(), listitems); setlistadapter(listadapter); confirmbtn = (button) layout.findviewbyid(r.id.itemdelete); cancelbtn = (button) layout.findviewbyid(r.id.itemcancel); } @override public void oncreateoptionsmenu(menu menu, menuinflater inflater) { inflater.inflate(r.menu.listview_omenu, menu); } @override public boolean onoptionsitemselected(menuitem item) { // todo auto-generated method stub int itemid = item.getitemid(); if (itemid == r.id.listomitem3) { sortdialogfragment sortdialog = sortdialogfragment.newinstance(listitems); sortdialog.show(getfragmentmanager(), "sort dialog"); } homecoming true; } public static class sortdialogfragment extends sherlockdialogfragment { public static sortdialogfragment newinstance(arraylist<myobject> objectstosort) { sortdialogfragment sortdialog = new sortdialogfragment(); bundle args = new bundle(); args.putparcelablearraylist("myobjects sort", objectstosort); sortdialog.setarguments(args); homecoming sortdialog; } @override public dialog oncreatedialog(bundle savedinstancestate) { alertdialog.builder builder = new alertdialog.builder(getactivity()); final arraylist<myobjects> objectstosort = getarguments().getparcelablearraylist("myobjects sort"); builder.settitle("sort objects by..."); builder.setsinglechoiceitems(r.array.sortdialogoptions, checkeditem, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub if (which == 0) { collections.sort(objectstosort, new comparatorone()); } else if (which == 1) { collections.sort(objectstosort, new comparatortwo()); } else { collections.sort(objectstosort, new comparatorthree()); } ????????????????????????????????????? // trying refresh list before dismissing dialog // apparently not have access listview's adapter phone call "notifydatasetchanged" method. dialog.dismiss(); } }); builder.setpositivebutton("cancel", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.dismiss(); } }); homecoming builder.create(); } } }

first refresh listview have phone call notifydatasetchanged on adapter you've set listview. start changing final myadapter listadapter field instead of variable.

next step pass adapter constructor of dialog , store in field. header of sortdialogfragment should this:

public static class sortdialogfragment extends sherlockdialogfragment { private myadapter madapter; public static sortdialogfragment newinstance(arraylist<myobject> objectstosort, myadapter adapter) { sortdialogfragment sortdialog = new sortdialogfragment(); sortdialog.setadapter(adapter); bundle args = new bundle(); args.putparcelablearraylist("myobjects sort", objectstosort); sortdialog.setarguments(args); homecoming sortdialog; } public void setadapter (myadapter adapter){ madapter = adapter; } (...)

next pass adapter when create sortdialogfragment. should this:

sortdialogfragment sortdialog = sortdialogfragment.newinstance(listitems, listadapter);

finally have phone call madapter.notifydatasetchanged(); on ????????????????

java android android-fragments communication android-dialogfragment

No comments:

Post a Comment