android - Using a ViewPager inside of a DialogFragment using Xamarin fails -
i can use viewpager inside of fragment can't seem work inside of dialogfragment. goal have modal dialogfragment viewpager allows user swipe between custom fragments. following error.
no view found id 0x7f0d003a (ei.teacherapp.droid:id/teachingclass_favorites_viewswitcher_pager) fragment favoritespagefragment{418bc9b0 #2 id=0x7f0d003a}
i know other posts using childfragmentmanager in native android solves problem. issue xamarin doesn't have childfragmentmanager. code dialogfragment below. error occurs in showfavorites when set viewpager adapter.
public class favoritesdialogfragment : pfdialogfragmentbase, ifavoritesview { private android.support.v4.view.viewpager viewpagerresults = null; private simpleviewpagerlistfragmentadapter pageradapterresults = null; private favoritespresenter presenter; private devicemessenger devicemessenger = null; #region dialogfragment life cycle overrides. //this gets called when button used or user clicks outside dialog. public override void oncancel(idialoginterface dialog) { base.oncancel(dialog); } public override void onresume() { base.onresume(); presenter = new favoritespresenter(this, devicemessenger); presenter.activate(); presenter.getfavorites(true); } public override void onpause() { base.onpause(); if (presenter != null) { presenter.view = null; presenter.deactivate(); } } #endregion public favoritesdialogfragment() { devicemessenger = applicationcontainer.instance.resolveconcrete<devicemessengermanager>().devicemessenger; } public override void oncreate(bundle savedinstancestate) { base.oncreate(savedinstancestate); // create fragment here } public static favoritesdialogfragment createnewdialogfragmentinstance() { favoritesdialogfragment frag = new favoritesdialogfragment(); bundle args = createbundle("", ""); frag.arguments = args; return frag; } protected override alertdialog createalertdialog(string title, string message) { view view = activity.layoutinflater.inflate(resource.layout.teaching_class_favorites_pager, null); viewpagerresults = view.findviewbyid<android.support.v4.view.viewpager>(resource.id.teachingclass_favorites_viewswitcher_pager); alertdialog.builder builder = new alertdialog.builder(new contextthemewrapper(activity, alertdialog.themehololight)) .setview(view); alertdialog dialog = builder.create(); return dialog; } #region ifavoritesview implementation public void logmessage(string message) { log.debug("favoritesdialogfragment", message); } public void showfavorites(list<einstruction.device.devicemessages.favoritesdevicemessage.favorite> favoritestoshow, int currentpage, int totalpages) { // first separate favorites pages dictionary<string, list<favoritesdevicemessage.favorite>> pages = new dictionary<string, list<favoritesdevicemessage.favorite>>(); foreach (favoritesdevicemessage.favorite favorite in favoritestoshow) { if (!pages.containskey(favorite.pagetitle)) { pages.add(favorite.pagetitle, new list<favoritesdevicemessage.favorite>()); } pages[favorite.pagetitle].add(favorite); } list<fragment> pagefragments = new list<fragment>(); if(pages.count > 0) { foreach (string key in pages.keys) { ilist<favoritedataitem> items = new list<favoritedataitem>(); foreach (favoritesdevicemessage.favorite favorite in pages[key]) { items.add(new favoritedataitem {favoriteid = favorite.id, title = favorite.label, imagename = ""/*favoritesicons[favorite.icon]*/, sequenceorder = favorite.sequenceorder }); } pagefragments.add(new favoritespagefragment(key, items.tolist())); } } else { pagefragments.add(new favoritespagefragment("no favorites assigned", new list<favoritedataitem>())); } activity.runonuithread(() => { pageradapterresults = new simpleviewpagerlistfragmentadapter(fragmentmanager, pagefragments.tolist()); viewpagerresults.adapter = pageradapterresults; }); } public void hidefavorites() { log.debug("favoritesdialogfragment", "hidefavorites called."); } public bool requestindividualpages { { return true; } } #endregion #region implemented abstract members of pfdialogfragmentbase public override bool dobuttonclick(int buttonindex) { return true; } #endregion }
Comments
Post a Comment