android - No view found for id ... for fragment in a Dialog -
i want show 2 tabs in custom dialog
in activity
, getting following error.
error:
no view found id 0x7f0f0134 (com.hiro.chatio:id/viewpage_theme) fragment postcolorpickerfragment{35ffefce #0 id=0x7f0f0134 android:switcher:2131689780:0} java.lang.illegalargumentexception: no view found id 0x7f0f0134 (com.hiro.chatio:id/viewpage_theme) fragment postcolorpickerfragment{35ffefce #0 id=0x7f0f0134 android:switcher:2131689780:0}
mainactivity
:
private button pick_color; @override protected void oncreate(final bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_create_blog); pick_color = (button) findviewbyid(r.id.create_blog_color_btn); pick_color.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { final dialog dialog = new dialog(createblogactivity.this); dialog.setcontentview(r.layout.blog_theme_picker); dialog.setcanceledontouchoutside(false); dialog.getwindow().getattributes().windowanimations = r.style.slideupdialoganimation; button pickcolor = (button) dialog.findviewbyid(r.id.pick_color_btn); button default_color = (button) dialog.findviewbyid(r.id.default_color); tablayout mtablayout = (tablayout) dialog.findviewbyid(r.id.main_tabs_theme); customviewpager mviewpager = (customviewpager) dialog.findviewbyid(r.id.viewpage_theme); themepageradapter mthemepageradapter = new themepageradapter(getsupportfragmentmanager()); mviewpager.setadapter(mthemepageradapter); mviewpager.setcurrentitem(0); mviewpager.setpagingenabled(false); mtablayout.setupwithviewpager(mviewpager); }); }
themepageradapter
:
public class themepageradapter extends fragmentpageradapter { public themepageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int position) { switch (position) { case 0: postcolorpickerfragment postcolorpickerfragment = new postcolorpickerfragment(); return postcolorpickerfragment; case 1: postthemepickerfragment postthemepickerfragment = new postthemepickerfragment(); return postthemepickerfragment; default: return null; } } @override public int getcount() { return 2; } public charsequence getpagetitle(int position) { switch (position) { case 0: return "color"; case 1: return "theme"; default: return null; } }
postthemepickerfragment
:
public class postthemepickerfragment extends fragment { public postthemepickerfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.post_theme_picker, container, false); return view; }
you're getting exception because activity
's fragmentmanager
cannot find view
s in dialog
, layout not attached activity
's hierarchy. in order use fragment
s in dialog
, you'll have use dialogfragment
, passing child fragmentmanager
pageradapter
handle transactions.
as regular fragment
, can inflate layout in oncreateview()
, , set in onviewcreated()
. we'll override oncreatedialog()
method modify window settings there.
public class themedialogfragment extends dialogfragment { public themedialogfragment() {} @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { return inflater.inflate(r.layout.blog_theme_picker, container, false); } @override public void onviewcreated(view view, bundle savedinstancestate) { button pickcolor = (button) view.findviewbyid(r.id.pick_color_btn); button default_color = (button) view.findviewbyid(r.id.default_color); tablayout mtablayout = (tablayout) view.findviewbyid(r.id.main_tabs_theme); customviewpager mviewpager = (customviewpager) view.findviewbyid(r.id.viewpage_theme); themepageradapter mthemepageradapter = new themepageradapter(getchildfragmentmanager()); mviewpager.setadapter(mthemepageradapter); mviewpager.setcurrentitem(0); mviewpager.setpagingenabled(false); mtablayout.setupwithviewpager(mviewpager); } @override public dialog oncreatedialog(bundle savedinstancestate) { dialog d = super.oncreatedialog(savedinstancestate); d.getwindow().getattributes().windowanimations = r.style.slideupdialoganimation; d.requestwindowfeature(window.feature_no_title); d.setcanceledontouchoutside(false); return d; } }
you can see had in onclick()
method handled in dialogfragment
, , method becomes simply:
pick_color.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { new themedialogfragment().show(getsupportfragmentmanager(), "theme"); } } );
Comments
Post a Comment