Android Fragment in alert dialog -
i making search page android application. want add search filters in sort of modal , suggestions on internet should use alertdialog fragment show custom filters. have managed fragment show in dialog code associated fragment such oncreate not being called. when use fragment directly in activity oncreate gets called not when being loaded alertdialog. there doing wrong or should doing way?
this code used open dialog
searchfilterdialogfragment dialog = new searchfilterdialogfragment(); fragmenttransaction fragmenttransaction = getfragmentmanager().begintransaction(); fragment prev = getfragmentmanager().findfragmentbytag("dialog"); if (prev != null) { fragmenttransaction.remove(prev); } fragmenttransaction.addtobackstack(null); dialog.show(fragmenttransaction,"dialog"); this code dialog configuration
public class searchfilterdialogfragment extends dialogfragment { @override public dialog oncreatedialog(bundle savedinstancestate) { // use builder class convenient dialog construction alertdialog.builder builder = new alertdialog.builder(getactivity()); layoutinflater inflater = getactivity().getlayoutinflater(); builder.setview(inflater.inflate(r.layout.fragment_blank,null)).settitle("search filters") .setpositivebutton(r.string.filter_dialogue_ok, new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int id) { // fire ze missiles! } }) .setnegativebutton(r.string.filter_dialogue_cancel, new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int id) { // user cancelled dialog } }); return builder.create(); } this test fragment have actual filters in it
public class blankfragment extends fragment { public blankfragment() { // required empty public constructor } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment return inflater.inflate(r.layout.fragment_blank, container, false); } }
dialogfragment is fragment. manages fragment lifecycle. want inside blankfragment should inside searchfilterdialogfragment. don't need blankfragment.
to answer question why blankfragment's code not geting called, it's because there's nothing referencing or instantiating blankfragment @ all. code:
builder.setview(inflater.inflate(r.layout.fragment_blank,null)) inflates fragment_blank layout dialogfragment, not start blankfragment code.
proper usage of dialogfragment custom setview:
@override public dialog oncreatedialog(bundle savedinstancestate) { //set title, button etc. alertdialog alertdialog.builder builder = new alertdialog.builder(getactivity()); builder.settitle("search filters"); //get layoutinflater layoutinflater inflater = getactivity().getlayoutinflater(); //inflate layout store returned view allow call findviewbyid view view = inflater.inflate(r.layout.fragment_blank,null); //do initial code regarding view, in oncreate view.findviewbyid(r.id.some_view); //finally, give custom view alertdialog builder builder.setview(view); }
Comments
Post a Comment