Android listview将项目保存到共享首选项后的滚动
我知道这个问题已经被问过很多次了,但我找不到任何解决问题的方法 我有一个列表视图,每行都有一个书签图标,这将把我选择的项目保存到共享首选项onClick中。我滚动我的listview没有问题,直到我点击一个项目保存到共享首选项,然后我在滚动和事件上有一个小故障,如果我从共享首选项中删除该项目,我仍然会有那个小故障。直到我卸载并重新安装应用程序或清除应用程序的缓存 适配器 共享优先级Android listview将项目保存到共享首选项后的滚动,android,listview,scroll,sharedpreferences,android-adapter,Android,Listview,Scroll,Sharedpreferences,Android Adapter,我知道这个问题已经被问过很多次了,但我找不到任何解决问题的方法 我有一个列表视图,每行都有一个书签图标,这将把我选择的项目保存到共享首选项onClick中。我滚动我的listview没有问题,直到我点击一个项目保存到共享首选项,然后我在滚动和事件上有一个小故障,如果我从共享首选项中删除该项目,我仍然会有那个小故障。直到我卸载并重新安装应用程序或清除应用程序的缓存 适配器 共享优先级 我刚刚修复了你的SharedReference类。。避免使用提交并避免重复初始化共享引用 public class
我刚刚修复了你的SharedReference类。。避免使用提交并避免重复初始化共享引用
public class SharedPreference {
public static final String PREFS_NAME = "PRODUCT_APP";
public static final String FAVORITES = "Favorite_Tones";
SharedPreferences settings;
SharedPreferences.Editor editor;
Gson gson = new Gson();
@SuppressLint("CommitPrefEdits")
public SharedPreference(Context context) {
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
editor = settings.edit();
}
// This four methods are used for maintaining favorites.
public void saveFavorites(List< Product > favorites) {
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.apply();
}
public void addFavorite(Product product) {
List < Product > favorites = getFavorites();
if (favorites == null)
favorites = new ArrayList < Product > ();
favorites.add(product);
saveFavorites(favorites);
Log.w("addPrefLog", favorites.toString());
}
public void removeFavorite(Product product) {
ArrayList < Product > favorites = getFavorites();
if (favorites != null) {
favorites.remove(product);
saveFavorites(favorites);
}
}
public ArrayList < Product > getFavorites() {
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Product[] favoriteItems = gson.fromJson(jsonFavorites, Product[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList < Product > (favorites);
} else
return null;
return (ArrayList < Product > ) favorites;
}
}
使用apply。。提交将阻止你的线程。感谢回复,我尝试了应用,但问题仍然存在。我修复了你的共享类。。试着看一看
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;
}
}
public class SharedPreference {
public static final String PREFS_NAME = "PRODUCT_APP";
public static final String FAVORITES = "Favorite_Tones";
SharedPreferences settings;
SharedPreferences.Editor editor;
Gson gson = new Gson();
@SuppressLint("CommitPrefEdits")
public SharedPreference(Context context) {
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
editor = settings.edit();
}
// This four methods are used for maintaining favorites.
public void saveFavorites(List< Product > favorites) {
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.apply();
}
public void addFavorite(Product product) {
List < Product > favorites = getFavorites();
if (favorites == null)
favorites = new ArrayList < Product > ();
favorites.add(product);
saveFavorites(favorites);
Log.w("addPrefLog", favorites.toString());
}
public void removeFavorite(Product product) {
ArrayList < Product > favorites = getFavorites();
if (favorites != null) {
favorites.remove(product);
saveFavorites(favorites);
}
}
public ArrayList < Product > getFavorites() {
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Product[] favoriteItems = gson.fromJson(jsonFavorites, Product[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList < Product > (favorites);
} else
return null;
return (ArrayList < Product > ) favorites;
}
}