Android listview将项目保存到共享首选项后的滚动

Android listview将项目保存到共享首选项后的滚动,android,listview,scroll,sharedpreferences,android-adapter,Android,Listview,Scroll,Sharedpreferences,Android Adapter,我知道这个问题已经被问过很多次了,但我找不到任何解决问题的方法 我有一个列表视图,每行都有一个书签图标,这将把我选择的项目保存到共享首选项onClick中。我滚动我的listview没有问题,直到我点击一个项目保存到共享首选项,然后我在滚动和事件上有一个小故障,如果我从共享首选项中删除该项目,我仍然会有那个小故障。直到我卸载并重新安装应用程序或清除应用程序的缓存 适配器 共享优先级 我刚刚修复了你的SharedReference类。。避免使用提交并避免重复初始化共享引用 public class

我知道这个问题已经被问过很多次了,但我找不到任何解决问题的方法

我有一个列表视图,每行都有一个书签图标,这将把我选择的项目保存到共享首选项onClick中。我滚动我的listview没有问题,直到我点击一个项目保存到共享首选项,然后我在滚动和事件上有一个小故障,如果我从共享首选项中删除该项目,我仍然会有那个小故障。直到我卸载并重新安装应用程序或清除应用程序的缓存

适配器

共享优先级


我刚刚修复了你的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;
    }
}