android - alert dialog box not responding? -
i trying developing app in alertdialog must open on button click in recylcerview , these error getting :
21 06:50:20.817 1037-1037/com.example.hephaestus.shadowpets4 e/androidruntime: fatal exception: main java.lang.illegalstateexception: need use theme.appcompat theme (or descendant) activity. @ android.support.v7.app.appcompatdelegateimplv9.createsubdecor(appcompatdelegateimplv9.java:359) @ android.support.v7.app.appcompatdelegateimplv9.ensuresubdecor(appcompatdelegateimplv9.java:328) @ android.support.v7.app.appcompatdelegateimplv9.setcontentview(appcompatdelegateimplv9.java:289) @ android.support.v7.app.appcompatdialog.setcontentview(appcompatdialog.java:83) @ android.support.v7.app.alertcontroller.installcontent(alertcontroller.java:225) @ android.support.v7.app.alertdialog.oncreate(alertdialog.java:257) @ android.app.dialog.dispatchoncreate(dialog.java:351) @ android.app.dialog.show(dialog.java:256) @ com.example.hephaestus.shadowpets4.adapters.traineradapter$1.onclick(traineradapter.java:84) @ android.view.view.performclick(view.java:4084) @ android.view.view$performclick.run(view.java:16966) @ android.os.handler.handlecallback(handler.java:615) @ android.os.handler.dispatchmessage(handler.java:92) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4745) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:786) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) @ dalvik.system.nativestart.main(native method)
after researching lot found answer problem order use alert dialog in activity should use activity instead of context while creating alert dialog , should use application context while using fragment , these changes must made in adapter(as i'm using recylcerview ) in activity in it's executed , these understand example : the following example of implementing alert dialog box recyclerview in fragment
public class adoptpetadapter extends recyclerview.adapter<adoptpetadapter.viewholder> { private context context; private list<pet> petlist; public adoptpetadapter(context context,list<pet> petlist) { this.context=context; this.petlist=petlist; } @override public adoptpetadapter.viewholder oncreateviewholder(viewgroup parent, int viewtype) { view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.layout_pet,parent,false); return new viewholder(view); } @override public void onbindviewholder(viewholder holder, final int position) { holder.petname.settext(petlist.get(position).getpetname()); holder.petcost.settext(petlist.get(position).getpetcost()); picasso.with(context).load(petlist.get(position).getpetimage()).into(holder.imageview); holder.btn_contact.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { layoutinflater li =layoutinflater.from(context); view promptsview = li.inflate(r.layout.petenquiryform,null); alertdialog.builder builder = new alertdialog.builder(context); builder.setview(promptsview); textview msg_title =(textview)promptsview.findviewbyid(r.id.txt_petenquirytitle); msg_title.settext("enquiry "+" "+petlist.get(position).getpetname()); edittext txt_message =(edittext) promptsview.findviewbyid(r.id.txt_message); builder.setcancelable(false) .setpositivebutton("send", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { } }) .setnegativebutton("cancel", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { } }); alertdialog alertdialog = builder.create(); alertdialog.show(); } }); } @override public int getitemcount() { return petlist.size(); } public class viewholder extends recyclerview.viewholder { private imageview imageview; private textview petcost,petname; private button btn_contact; public viewholder(view itemview) { super(itemview); imageview=(imageview)itemview.findviewbyid(r.id.img_pet); petcost=(textview)itemview.findviewbyid(r.id.txt_petprice); petname=(textview)itemview.findviewbyid(r.id.txt_petname); btn_contact=(button)itemview.findviewbyid(r.id.btn_contactseller); } } } in order implement in fragment have following code
public class pets extends fragment { list<pet> petlist; recyclerview recyclerview; progressdialog pdialog; adoptpetadapter adapter; public pets() { // required empty public constructor } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment view view= inflater.inflate(r.layout.fragment_pets, container, false); return view; } @override public void onviewcreated(view view, @nullable bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); recyclerview=(recyclerview)view.findviewbyid(r.id.list_pets); initviews(); } private void initviews() { pdialog = new progressdialog(getcontext()); pdialog.setmessage("loading,please wait..."); pdialog.setcancelable(false); pdialog.show(); try { glide.with(this).load(r.drawable.ic_menu_gallery).into((imageview) recyclerview.findviewbyid(r.id.img_pet)); } catch (exception ex) { } petlist=new arraylist<>(); adapter=new adoptpetadapter(getcontext(),petlist); recyclerview.layoutmanager layoutmanager = new gridlayoutmanager(getactivity(),2); recyclerview.setlayoutmanager(layoutmanager); recyclerview.sethasfixedsize(true); recyclerview.setadapter(adapter); loadjson(); } private void loadjson() { try { retrofit retrofit = new retrofit.builder().baseurl(apiurl.base_url).addconverterfactory(gsonconverterfactory.create()).build(); apiservice service=retrofit.create(apiservice.class); call<response> call =service.getpetlist(); call.enqueue(new callback<response>() { @override public void onresponse(call<response> call, retrofit2.response<response> response) { list<pet>data=response.body().getpetlist(); recyclerview.setadapter(new adoptpetadapter(getactivity(),data)); recyclerview.smoothscrolltoposition(0); pdialog.hide(); } @override public void onfailure(call<response> call, throwable t) { pdialog.dismiss(); } }); } catch (exception ex) { pdialog.hide(); } } } **while implementing in activity should changed following , following code adapter , implementing alert dialog box in **
public class traineradapter extends recyclerview.adapter<traineradapter.viewholder> { private activity activity; private list<trainer> trainerlist; public traineradapter(activity activity,list<trainer> trainerlist) { this.activity=activity; this.trainerlist=trainerlist; } @override public traineradapter.viewholder oncreateviewholder(viewgroup parent, int viewtype) { view view= layoutinflater.from(parent.getcontext()).inflate(r.layout.layout_trainer,parent,false); return new viewholder(view); } @override public void onbindviewholder(viewholder holder, int position) { holder.trainername.settext(trainerlist.get(position).gettrainername()); holder.trainerlocation.settext(trainerlist.get(position).gettrainerphone()); holder.btnenquiretrnr.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { layoutinflater li = layoutinflater.from(activity); view promptsview = li.inflate(r.layout.trainerenquiryform,null); alertdialog.builder builder = new alertdialog.builder(activity); builder.setview(promptsview); builder.setcancelable(false) .setpositivebutton("send", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { } }) .setnegativebutton("cancel", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { } }); alertdialog alertdialog = builder.create(); alertdialog.show(); } }); } @override public int getitemcount() { return trainerlist.size(); } public class viewholder extends recyclerview.viewholder { private textview trainername,trainerlocation; private button btnenquiretrnr; public viewholder(view itemview) { super(itemview); trainername=(textview)itemview.findviewbyid(r.id.txt_trainername); trainerlocation=(textview)itemview.findviewbyid(r.id.txt_trainerlocation); btnenquiretrnr=(button)itemview.findviewbyid(r.id.btn_enquiretrnr); } } } in order implement activity how should implement it
public class trainers extends appcompatactivity { recyclerview trainerslist; list<trainer> list; progressdialog pdialog; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_trainers); pdialog = new progressdialog(this); pdialog.setcancelable(false); pdialog.setmessage("loading,please wait...."); pdialog.show(); trainerslist =(recyclerview)findviewbyid(r.id.list_trainers); trainerslist.sethasfixedsize(true); recyclerview.layoutmanager layoutmanager= new linearlayoutmanager(getapplicationcontext(),linearlayoutmanager.vertical,false); trainerslist.setlayoutmanager(layoutmanager); loaddata(); } private void loaddata() { try { retrofit retrofit = new retrofit.builder().baseurl(apiurl.base_url).addconverterfactory(gsonconverterfactory.create()).build(); apiservice service = retrofit.create(apiservice.class); call<response> call = service.gettrainers(); call.enqueue(new callback<response>() { @override public void onresponse(call<response> call, retrofit2.response<response> response) { list=response.body().gettrainerlist(); traineradapter traineradapter=new traineradapter(trainers.this,list); trainerslist.setadapter(traineradapter); pdialog.hide(); } @override public void onfailure(call<response> call, throwable t) { } }); } catch (exception ex) { } } } i hope these answers many people queries had
Comments
Post a Comment