Android GridView leave trail when scrolling -
i have gridview implemented within activity , fragment, , contain own adapter. works great, until scrolling, when try scroll appears leave background of first items loaded.
here's code implementing:
activity class
public class favoriteactivity extends actionbaractivity { private final string log_tag = favoriteactivity.class.getsimplename(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_favorite); if (savedinstancestate == null) { getsupportfragmentmanager().begintransaction() .add(r.id.container, new favoritelistfragment()) .commit(); } } @override protected void onresume() { super.onresume(); favoritelistfragment fragment = (favoritelistfragment)getsupportfragmentmanager().findfragmentbyid(r.id.container); if ( null != fragment ) { fragment.onrestartloader(); } } }
fragment class
public class favoritelistfragment extends fragment implements loadermanager.loadercallbacks<cursor> { public static final string log_tag = favoritelistfragment.class.getsimplename(); private static final int loader = 0; private static final string selected_key = "selected_position"; private resultlistadapter madapter; private gridview mgridview; private int mposition = listview.invalid_position; public static final string[] smcontent_columns = { smdbcontract.smcontententry.column_title, }; static final int col_title = 0; @override public void onactivitycreated(bundle savedinstancestate) { getloadermanager().initloader(loader, null, this); super.onactivitycreated(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { madapter = new resultlistadapter(getactivity(), null, 0); madapter.setisfavoriteview(true); view rootview = inflater.inflate(r.layout.fragment_favorite, container, false); mgridview = (gridview) rootview.findviewbyid(r.id.listview_sm_content_favorite); mgridview.setadapter(madapter); if (savedinstancestate != null && savedinstancestate.containskey(selected_key)) { mposition = savedinstancestate.getint(selected_key); } return rootview; } void onrestartloader() { getloadermanager().restartloader(loader, null, this); } @override public void onsaveinstancestate(bundle outstate) { // when tablets rotate, selected list item needs saved. // when no item selected, mposition set listview.invalid_position, if (mposition != listview.invalid_position) { outstate.putint(selected_key, mposition); } super.onsaveinstancestate(outstate); } @override public loader<cursor> oncreateloader(int i, bundle bundle) { string favs = utility.getfavoritesids(getactivity()); uri resultsearchuri = smdbcontract.smcontententry .buildsmcontentmultiple(smdbcontract.category_serie, favs); log.d(log_tag,"prefs uri: "+resultsearchuri); return new cursorloader(getactivity(), resultsearchuri, smcontent_columns, null, null, null); } @override public void onloadfinished(loader<cursor> loader, cursor data) { madapter.swapcursor(data); madapter.setcursor(data); if (mposition != listview.invalid_position) { mgridview.smoothscrolltoposition(mposition); } } @override public void onloaderreset(loader<cursor> loader) { madapter.swapcursor(null); } }
adapter
public class resultlistadapter extends cursoradapter { private context mcontext; private cursor mcursor; public resultlistadapter(context context, cursor c, int flags) { super(context, c, flags); mcontext = context; mcursor = c; } public cursor getcursor() { return mcursor; } public void setcursor(cursor mcursor) { this.mcursor = mcursor; } public static class viewholder { public final imageview iconview; public final textview titleview; public viewholder(view view) { iconview = (imageview) view.findviewbyid(r.id.list_item_icon); titleview = (textview) view.findviewbyid(r.id.list_item_title_textview); } } @override public view newview(context context, cursor cursor, viewgroup parent) { view view = layoutinflater.from(context).inflate(r.layout.grid_item, parent, false); viewholder viewholder = new viewholder(view); view.settag(viewholder); return view; } @override public void bindview(view view, context context, cursor cursor) { viewholder viewholder = (viewholder) view.gettag(); if (viewholder.iconview != null) { picasso.with(context) .load(cursor.getstring(resultlistfragment.col_poster)) .fit() .centerinside() .into(viewholder.iconview); } if (viewholder.titleview != null) viewholder.titleview.settext(cursor.getstring(resultlistfragment.col_title)); } }
activity layout
<fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginleft="16dp" android:layout_marginright="16dp" android:name=".favoritelistfragment" tools:context=".favoritelistfragment" tools:layout="@android:layout/list_content" />
fragment layout
<framelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="![enter image description here][1].favoritelistfragment"> <gridview android:id="@+id/listview_sm_content_favorite" android:layout_width="match_parent" android:layout_height="match_parent" android:columnwidth="100dp" android:numcolumns="auto_fit" android:verticalspacing="5dp" android:horizontalspacing="5dp" android:stretchmode="columnwidth" android:gravity="center" /> </framelayout>
grid item layout
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <framelayout android:layout_width="100dp" android:layout_height="150dp" android:layout_gravity="center" > <imageview android:id="@+id/list_item_icon" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/ic_launcher"/> </framelayout> <textview android:id="@+id/list_item_title_textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:fontfamily="sans-serif-light" android:layout_gravity="center" android:textappearance="?android:textappearancemedium" android:text="my item title"/> </linearlayout>
update: found out removing code favoriteactivity.oncreate error stops... why!? can tell me
if (savedinstancestate == null) { getsupportfragmentmanager().begintransaction() .add(r.id.container, new favoritelistfragment()) .commit(); }
remove following lines grid item layout
:
from imageview
remove:
android:src="@mipmap/ic_launcher"
from textview
remove:
android:text="my item title"
Comments
Post a Comment