java - Call OnItemClick method several times on the same activity: -
i'm trying call onitemclick method several time on activity, every time click on item of listvew, content changes, , when click again on item of new content need call method again, code:
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); lescat=new arraylist<categorie>(); cg=new categoriegest(); //get categories lescat=gc.getallcategories(); lvliste= (listview)findviewbyid(r.id.listview1); //display root categories in listview adapter = new categoriesadapter(this, cg.getrootcategories(lescat)); lvliste.setadapter(adapter); lvliste.setonitemclicklistener(this); } public void onitemclick(adapterview<?> parent, view view, int position, long id) { cg=new categoriesgest(); //if clicked categorie has sub categories, display them //in new listeview if( cg.haschild( lescat.get(position) ) ) { lv = new listview(this); lescat1=cg.getchilds(lescat, lescat.get(position) ); categoriesadapter adapter = new categoriesadapter(this, lescat1); lv.setadapter(adapter); setcontentview(lv); lv.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { lescat2=cg.getchilds(lescat, lescat1.get(position) ); categoriesadapter adapter = new categoriesadapter(mainactivity.this, lescat2); lv.setadapter(adapter); setcontentview(lv); } }); } } is there way better this? if need call onitemclick method more 2 time have repeat lv.setonitemclicklistener(new onitemclicklistener() { //code}); again
you creating new adapter every time click on item causing list change.
set adapter once (outside click handler) , handle clicks.
you need set click handler once.
see example: http://android-helper.blogspot.co.uk/2011/04/android-listview-onclick-ample.html
update: amendment after new information.
your original question "is there better way this?" opinion.
your solution of recreating listviews , adapters on every click unnecessary , wasteful of resources. in opinion, should have 1 listview , 1 adapter accomplish task have set. clickhandler on listview should set once only.
in effect, doing when clicking on category discarding current listview , adapter, creating new ones replacing view tree when more efficient reuse objects have.
when click on listviewitem, clear current adapter, repopulate updated list of categories based on 1 clicked on , call notifydatasetchanged on adapter repopulate listview updated information.
this not complete sample illustrates major points.
// assumes have custom listadapter named catadapter returns "category" views protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); getlistview().setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { categoryitem ci=((categoryitem) getlistadapter()).getitem(position); // clicked category refreshdata(ci.getcategoryid); } }); refreshdata(0); // root category } // updates listview list of categories public void refreshdata(int parentcategoryid) { arraylist<category> items = category.getitem(parentcategoryid); catadapter adp = (catadapter) getlistadapter(); // may need implement these methods on adapter adp.clear(); // clear out old categories adp.addall(items); // add new items adapter adp.notifydatasetchanged(); // refresh ui }
Comments
Post a Comment