i have implemented custom listview
extending relative layout
every row.
every row has checkbox
,textview,edittext
. working fine. maintains states. listview onitemclicklistener
working till row having checkbox , textview. stopped working added edittext in row.
appreciable.
this code
@override public view getview(int position, view convertview, viewgroup parent) { viewholder viewholder = null; if (convertview == null) { layoutinflater inflator = context.getlayoutinflater(); convertview = inflator.inflate(r.layout.takeso_row, null); viewholder = new viewholder(); viewholder.text = (textview) convertview.findviewbyid(r.id.takesolabel); viewholder.checkbox = (checkbox) convertview.findviewbyid(r.id.takesocheck); viewholder.edittext = (edittext) convertview.findviewbyid(r.id.takesoquantity); viewholder.edittext.setclickable(true); viewholder.edittext.setfocusable(true); viewholder.edittext.setonfocuschangelistener(new onfocuschangelistener() { public void onfocuschange(view v, boolean hasfocus) { // todo auto-generated method stub int getposition = (integer) v.gettag(); if(!hasfocus){ //final int pos = position; final edittext quantity = (edittext) v; //product prod = (product)v.gettag(); if(quantity.gettext().tostring().length() == 0){ list.get(getposition).setprodquantity(0); }else{ list.get(getposition).setprodquantity(integer.parseint(quantity.gettext().tostring())); } } } }); viewholder.checkbox.setoncheckedchangelistener(new oncheckedchangelistener() { public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { // todo auto-generated method stub int getposition = (integer) buttonview.gettag(); // here position have set checkbox using settag. list.get(getposition).setischecked(buttonview.ischecked()); // set value of checkbox maintain state. for(int i=0; < passlist.size(); i++) { if(list.get(getposition).getproductid().compareto(passlist.get(i).getproductid()) == 0){ passlist.get(i).setischecked(ischecked); //log.d(passlist.get(i).getproductname(), passlist.get(i).getischecked().tostring()); } } } }); convertview.settag(viewholder); convertview.settag(r.id.label, viewholder.text); convertview.settag(r.id.check, viewholder.checkbox); convertview.settag(r.id.check, viewholder.edittext); }else{ viewholder = (viewholder) convertview.gettag(); } viewholder.checkbox.settag(position); // line important. viewholder.edittext.settag(position); viewholder.text.settext(list.get(position).getproductname()); viewholder.checkbox.setchecked(list.get(position).getischecked()); viewholder.edittext.settext(list.get(position).getprodquantity().tostring()); return convertview; }`
xml code-
`
<checkbox android:id="@+id/takesocheck" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_marginleft="4dip" android:layout_marginright="10dip" android:focusable="false" android:focusableintouchmode="false"> </checkbox> <textview android:id="@+id/takesolabel" android:layout_width="wrap_content" android:layout_height="40sp" android:textsize="25sp" android:layout_torightof="@id/takesocheck"> </textview> <edittext android:id="@+id/takesoquantity" android:layout_alignparentright="true" android:layout_width="120dip" android:layout_height="wrap_content" style="@style/edittext" android:inputtype="number" android:layout_gravity="right" android:selectallonfocus="true"/> <view android:layout_width="fill_parent" android:layout_height="1dp" android:background="@drawable/blue" android:layout_below="@id/takesocheck"/>
`
add
android:focusable="false"
attribute checkbox. stop checkbox stealing list item clicks.
add android:descendantfocusability="beforedescendants"
listview makes viewgroup focus before of descendants.
Comments
Post a Comment