java - ExpandableListView Order Changed When Click -
when click groupview order of expandablelist changes
i've found 1 similiar problem here
the order seems random, don't understand happened.
here's code, know it's mess, i've rewritten lot of times.
public class managelistadapter extends baseexpandablelistadapter{ public static final int server_type=0x000001; public static final int history_type=0x000002; private list<serverelement> mdata; private layoutinflater minflater; private int viewtype; public managelistadapter (context c,int type,arraylist<serverelement> data){ minflater = (layoutinflater)c.getsystemservice(context.layout_inflater_service); mdata=(list<serverelement>) collections.synchronizedlist(new arraylist<serverelement>()); mdata=data; } @override public object getchild(int groupposition, int childposition) { // todo auto-generated method stub return mdata.get(groupposition); } @override public long getchildid(int groupposition, int childposition) { // todo auto-generated method stub return childposition; } @override public view getchildview(int groupposition, int childposition, boolean islastchild, view convertview, viewgroup parent) { // todo auto-generated method stub viewholder viewholder; if(convertview==null){ convertview=minflater.inflate(r.layout.managelistchildelement, null); edittext ip=(edittext) convertview.findviewbyid(r.id.manageip); ip.settext(mdata.get(groupposition).mip); edittext port=(edittext) convertview.findviewbyid(r.id.manageport); port.settext(mdata.get(groupposition).mport); edittext username=(edittext) convertview.findviewbyid(r.id.manageusername); username.settext(mdata.get(groupposition).musername); edittext password=(edittext) convertview.findviewbyid(r.id.managepwd); password.settext(mdata.get(groupposition).mpassword); imagebutton btnupdate=(imagebutton) convertview.findviewbyid(r.id.okbtn); viewholder=new viewholder(ip,groupposition); switch(this.viewtype){ case history_type: ip.setfocusable(false); port.setfocusable(false); username.setfocusable(false); password.setfocusable(false); btnupdate.setvisibility(view.invisible); break; case server_type: btnupdate.setfocusable(false); break; } convertview.settag(viewholder); }else{ viewholder=(viewholder) convertview.gettag(); } return convertview; } @override public int getchildrencount(int groupposition) { // todo auto-generated method stub return 1; } @override public object getgroup(int groupposition) { // todo auto-generated method stub return mdata.get(groupposition); } @override public int getgroupcount() { // todo auto-generated method stub return mdata.size(); } @override public long getgroupid(int groupposition) { // todo auto-generated method stub return groupposition; } public void deleteitem(int groupposition){ if(mdata.size()<=0) return; int i=0; while (groupposition+i+1<mdata.size()) { mdata.set(groupposition+i, mdata.get(groupposition+i+1)); i++; } mdata.remove(mdata.size()-1); notifydatasetchanged(); } public void additem(serverelement element){ mdata.add(element); notifydatasetchanged(); } @override public view getgroupview(int groupposition, boolean isexpanded, view convertview, viewgroup parent) { // todo auto-generated method stub viewholder viewholder; if(convertview==null){ convertview=minflater.inflate(r.layout.managelistgroupelement, null); textview view=(textview) convertview.findviewbyid(r.id.elementcaption); imageview viewdelete=(imageview) convertview.findviewbyid(r.id.deletebtn); //viewdelete.setfocusable(false); view.settext(mdata.get(groupposition).mname); view.setgravity(gravity.center_vertical | gravity.left); view.setpadding(36, 0, 0, 0); if(groupposition==0){ log.v("managelistadapter", "still can 0"); } viewholder=new viewholder(view,groupposition); viewdelete.setonclicklistener(new onclicklistener(){ @override public void onclick(view v) { // todo auto-generated method stub deleteitem(getviewholder(v).position); } }); convertview.settag(viewholder); }else{ viewholder=(viewholder) convertview.gettag(); } return convertview; } @override public boolean hasstableids() { // todo auto-generated method stub return false; } @override public boolean ischildselectable(int groupposition, int childposition) { // todo auto-generated method stub return true; } @override public boolean areallitemsenabled() { return true; } public static class viewholder{ private textview txtview; public final int position; public viewholder(textview view,int position){ this.txtview=view; this.position=position; } } public viewholder getviewholder(view v) { if(v.gettag() == null) { return getviewholder((view)v.getparent()); } return (viewholder)v.gettag(); } private class ondeleteclicklistener implements onclicklistener{ private int mgroupposition; ondeleteclicklistener(int groupposition){ mgroupposition = groupposition; } @override public void onclick(view v) { // todo auto-generated method stub log.v("managelistadapter","deleting group "+mgroupposition); deleteitem(mgroupposition); } } private class onupdateclicklistener implements onclicklistener{ private int mgroupposition; private int mchildrenposition; onupdateclicklistener(int groupposition,int childrenposition){ mgroupposition = groupposition; mchildrenposition=childrenposition; } @override public void onclick(view v) { // todo auto-generated method stub additem(mdata.get(mgroupposition)); } }
}
and layout
managelistchildelement.xml
<?xml version="1.0" encoding="utf-8"?> <tablelayout android:id="@+id/tablelayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <tablerow android:id="@+id/tablerow1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <textview android:textappearance="?android:attr/textappearancemedium" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview1" android:text="@string/ip:port"></textview> <edittext android:id="@+id/manageip" android:layout_width="wrap_content" android:layout_height="wrap_content"> <requestfocus></requestfocus> </edittext> <textview android:textappearance="?android:attr/textappearancemedium" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview2" android:text="@string/:"></textview> <edittext android:id="@+id/manageport" android:layout_width="wrap_content" android:layout_height="wrap_content"></edittext> </tablerow> <tablerow android:id="@+id/tablerow2" android:layout_width="wrap_content" android:layout_height="wrap_content"> <textview android:textappearance="?android:attr/textappearancemedium" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview3" android:text="@string/username"></textview> <edittext android:id="@+id/manageusername" android:layout_width="wrap_content" android:layout_height="wrap_content"></edittext> </tablerow> <tablerow android:id="@+id/tablerow3" android:layout_width="wrap_content" android:layout_height="wrap_content"> <textview android:textappearance="?android:attr/textappearancemedium" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview4" android:text="@string/password"></textview> <edittext android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputtype="textpassword" android:id="@+id/managepwd"></edittext> <imagebutton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ok" android:id="@+id/okbtn" android:focusable="false" android:focusableintouchmode="false"></imagebutton> </tablerow> </tablelayout>
managelistgroupelement.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:orientation="horizontal" android:layout_width="wrap_content" android:baselinealigned="false"> <textview android:textappearance="?android:attr/textappearancemedium" android:layout_height="wrap_content" android:text="textview" android:id="@+id/elementcaption" android:layout_weight="1" android:layout_width="0dp"></textview> <imageview android:src="@drawable/delete" android:id="@+id/deletebtn" android:layout_gravity="right" android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:focusable="false" android:focusableintouchmode="false"></imageview> </linearlayout>
Comments
Post a Comment