Ich weiß, dass diese Frage oft gestellt wurde, aber ich konnte keine Lösung für mein Problem finden.listview laggy Scroll nach dem Speichern eines Elements in gemeinsamen Einstellungen
Ich habe eine Listenansicht mit einem Lesezeichen-Symbol in jeder Zeile, die mein ausgewähltes Element in freigegebene Einstellungen onClick speichert. Ich habe kein Problem mit dem Scrollen meiner Listenansicht, bis ich auf ein einzelnes Element klicke, um es in freigegebene Einstellungen zu speichern. Dann habe ich einen Fehler beim Scrollen und Ereignis, wenn ich dieses Element aus meinen freigegebenen Einstellungen entferne. bis ich die Anwendung deinstalliere und neu installiere oder den Cache der App lösche.
Adapter
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.android_hive_list_row, null);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.rating = (TextView) convertView.findViewById(R.id.rating);
holder.genre = (TextView) convertView.findViewById(R.id.genre);
holder.year = (TextView) convertView.findViewById(R.id.releaseYear);
holder.playPauseHive=(ImageView)convertView.findViewById(R.id.playPauseHive);
holder.favoriteImgHive = (ImageView) convertView.findViewById(R.id.favImageHive);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
Product m = movieItems.get(position);
holder.title.setText(m.getTitle());
holder.rating.setText("Rating: " + String.valueOf(m.getRating()));
String genreStr = "";
for (String str : m.getGenre()) {
genreStr += str + ", ";
}
genreStr = genreStr.length() > 0 ? genreStr.substring(0,genreStr.length() - 2) : genreStr;
holder.genre.setText(genreStr);
holder.year.setText(String.valueOf(m.getYear()));
holder.favoriteImgHive.setImageResource(m.getFavId());
holder.favoriteImgHive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callback != null) {
callback.favOnClick(position,v);;
}
}
});
if (checkFavoriteItem(m)) {
holder.favoriteImgHive.setImageResource(R.mipmap.bookmarked);
holder.favoriteImgHive.setTag("red");
notifyDataSetChanged();
} else {
holder.favoriteImgHive.setImageResource(R.mipmap.bookmark_border);
holder.favoriteImgHive.setTag("grey");
notifyDataSetChanged();
}
return convertView;
}
/*Checks whether a particular product exists in SharedPreferences*/
public boolean checkFavoriteItem(Product checkProduct) {
boolean check = false;
List<Product> favorites = sharedPreference.getFavorites(activity);
if (favorites != null) {
for (Product product: favorites) {
if (product.equals(checkProduct)) {
check = true;
notifyDataSetChanged();
break;
}
}
notifyDataSetChanged();
}
return check;
}
Geteilt Pref
public class SharedPreference {
public static final String PREFS_NAME = "PRODUCT_APP";
public static final String FAVORITES = "Favorite_Tones";
public SharedPreference() {
super();
}
// This four methods are used for maintaining favorites.
public void saveFavorites(Context context, List<Product> favorites) {
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public void addFavorite(Context context, Product product) {
List<Product> favorites = getFavorites(context);
if (favorites == null)
favorites = new ArrayList<Product>();
favorites.add(product);
saveFavorites(context, favorites);
Log.w("addPrefLog", favorites.toString());
}
public void removeFavorite(Context context, Product product) {
ArrayList<Product> favorites = getFavorites(context);
if (favorites != null) {
favorites.remove(product);
saveFavorites(context, favorites);
}
}
public ArrayList<Product> getFavorites(Context context) {
SharedPreferences settings;
List<Product> favorites;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
Product[] favoriteItems = gson.fromJson(jsonFavorites,Product[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList<Product>(favorites);
} else
return null;
return (ArrayList<Product>) favorites;
}
}
Verwenden Sie a pply() .. commit() wird deinen Thread blockieren. – ZeroOne