android - Buttons Missing When Scroll the ListView -
when click listview item, particular item button visible. when scroll listview buttons gone. how implement functionality. wrong in please me. thanks
here code:
mainactivity.java
public class mainactivity extends activity { listview lv; sampleadapter sa; arraylist<string> as=new arraylist<string>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); for(int i=0;i<20;i++) { as.add(string.valueof(i)); } lv=(listview)findviewbyid(r.id.listview1); sa=new sampleadapter(mainactivity.this); lv.setadapter(sa); } class sampleadapter extends baseadapter { context ctx; button b; textview tv; layoutinflater lin; public sampleadapter(context ct) { this.ctx=ct; } @override public int getcount() { // todo auto-generated method stub return as.size(); } @override public object getitem(int arg0) { // todo auto-generated method stub return arg0; } @override public long getitemid(int arg0) { // todo auto-generated method stub return arg0; } @override public view getview(int pos, view arg1, viewgroup arg2) { // todo auto-generated method stub lin=(layoutinflater)ctx.getsystemservice(layout_inflater_service); arg1=lin.inflate(r.layout.li, null); tv=(textview)arg1.findviewbyid(r.id.textview1); b=(button)arg1.findviewbyid(r.id.button1); tv.settext(as.get(pos)); b.settext(as.get(pos)); arg1.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { button c=(button)v.findviewbyid(r.id.button1); c.setvisibility(view.visible); } }); return arg1; } } }
activity_main.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <listview android:id="@+id/listview1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" > </listview> </linearlayout>
li.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <textview android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> <button android:id="@+id/button1" style="?android:attr/buttonstylesmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" android:text="button" /> </linearlayout>
you have
android:visibility="invisible"
this makes button not visible.
and have
c.setvisibility(view.visible);
you need understand listview recycles views. when scroll buttons become invisible because views recycled.
check below link
how listview's recycling mechanism works
well check example similar yours
listview subobject clickable confilct
to fix can use model class
model class
public class model { int visibility; string value; public int getvisibility() { return visibility; } public void setvisibility(int visibility) { this.visibility = visibility; } public string getvalue() { return value; } public void setvalue(string value) { this.value = value; } }
mainactivity.java
public class mainactivity extends activity { listview lv; sampleadapter sa; final int visible1 = view.invisible; final int visible2 = view.visible; arraylist<model> as=new arraylist<model>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); for(int i=0;i<20;i++) { model model = new model(); model.setvalue(string.valueof(i)); model.setvisibility(visible1); as.add(model); } lv=(listview)findviewbyid(r.id.listview1); sa=new sampleadapter(mainactivity.this); lv.setadapter(sa); } class sampleadapter extends baseadapter { context ctx; button b; textview tv; layoutinflater lin; public sampleadapter(context ct) { this.ctx=ct; } @override public int getcount() { // todo auto-generated method stub return as.size(); } @override public object getitem(int arg0) { // todo auto-generated method stub return arg0; } @override public long getitemid(int arg0) { // todo auto-generated method stub return arg0; } @override public view getview(int pos, view arg1, viewgroup arg2) { // todo auto-generated method stub lin=(layoutinflater)ctx.getsystemservice(layout_inflater_service); arg1=lin.inflate(r.layout.fg, null); tv=(textview)arg1.findviewbyid(r.id.textview1); b=(button)arg1.findviewbyid(r.id.button1); tv.settext(as.get(pos).getvalue()); b.settext(as.get(pos).getvalue()); arg1.settag(pos); b.setvisibility(as.get(pos).getvisibility()); arg1.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { int pos = (int) v.gettag(); model model = as.get(pos); model.setvisibility(visible2); sampleadapter.this.notifydatasetchanged(); } }); return arg1; } } }
snap
you can scroll , down , state remains
Comments
Post a Comment