java - Listview sometimes null when I use gettag -
i have problem view in android. use gridview items inside it. each item have name, button,description , icon. each item has listview. when click on button want show listview linked button.
on startup works, when scroll , down few times listview either doesn't show or shows wrong listview.
i have read alot of other questions , articles, cant find thing doing wrong.
also tried still gives same result
if (convertview == null){ holder = new new listholder(); convertview.settag(holder); } else { holder = (listholder) convertview.gettag(); } the getview
@override public view getview(int position, view convertview, viewgroup parent) { view row = convertview; listholder holder; harmonicaitem harmonicaitem = ((mainactivity) context).getharmonicaitems().get(position); if (row == null) { layoutinflater inflater = ((activity) context).getlayoutinflater(); row = inflater.inflate(layoutresourceid, parent, false); } holder = new listholder(); holder.logo = (imageview) row.findviewbyid(r.id.logo); holder.line = (textview) row.findviewbyid(r.id.line); holder.button = (button) row.findviewbyid(r.id.button); holder.listview = (listview) row.findviewbyid(r.id.subharmonica); holder.logo.setimageresource(harmonicaitem.logo); holder.button.settext(harmonicaitem.title); holder.button.setonclicklistener(onclicklistener); harmonicaitem.listview = holder.listview; harmonicaitem.button = holder.button; holder.listview.settag(harmonicaitem); holder.button.settag(harmonicaitem); row.settag(holder); return row; } the model class
static class listholder { imageview logo; textview line; button button; listview listview; } how retrieve item
@override public void onclick(view v) { harmonicaitem item = (harmonicaitem) v.gettag(); } layout of item inside gridview:
<relativelayout android:id="@+id/buttonlayout" android:layout_width="wrap_content" android:layout_height="wrap_content"> <button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:gravity="center_vertical|left" android:paddingleft="115dp" android:paddingright="10dp" android:text="loop" android:textcolor="@android:color/black" android:textstyle="bold"/> <imageview android:id="@+id/logo" android:layout_width="35dp" android:layout_height="35dp" android:layout_alignparentleft="true" android:layout_centervertical="true" android:layout_marginleft="10dp" /> <textview android:id="@+id/line" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/button" android:layout_alignbottom="@+id/button" android:layout_centervertical="true" android:layout_marginleft="10dp" android:layout_torightof="@+id/logo" android:text="00:00" android:textappearance="?android:attr/textappearancemedium" android:textcolor="@android:color/black" android:textstyle="bold"/> </relativelayout> <listview android:id="@+id/subharmonica" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/buttonlayout" android:visibility="gone"/> so summary of problem: item.listview null , wrong listview.
my goal fill listview , make visible when click button.
what doing wrong?
edit
apparently made mistake in other code. when listviews went gone saved listview. when wanted show again took wrong list. there nothing wrong adapter.
try this. issue in code 1. miss else part 2.need set tag inside if condition
@override public view getview(int position, view convertview, viewgroup parent) { view row = convertview; listholder holder; harmonicaitem harmonicaitem = ((mainactivity) context).getharmonicaitems().get(position); if (row == null) { layoutinflater inflater = ((activity) context).getlayoutinflater(); row = inflater.inflate(layoutresourceid, parent, false); holder = new listholder(); holder.logo = (imageview) row.findviewbyid(r.id.logo); holder.line = (textview) row.findviewbyid(r.id.line); holder.button = (button) row.findviewbyid(r.id.button); holder.listview = (listview) row.findviewbyid(r.id.subharmonica); holder.listview.settag(harmonicaitem); holder.button.settag(harmonicaitem); row.settag(holder); }else{ holder = (listholder)row.gettag(); } holder.logo.setimageresource(harmonicaitem.logo); holder.button.settext(harmonicaitem.title); holder.button.setonclicklistener(onclicklistener); return row; } edit: removed 2 lines of code in is
armonicaitem.listview = holder.listview; harmonicaitem.button = holder.button; i think not needed. try without this.
Comments
Post a Comment