Сохранить любимый элемент из списка в SharedPreferences в android? - PullRequest
0 голосов
/ 22 апреля 2020

Я звоню по списку предметов из Firebase Firestore. и установить его в режиме рециркуляции. и я реализовал функциональность сохранения элемента в качестве избранного, сохраняя его положение в списке массивов общих настроек. Но проблема, с которой я столкнулся, состоит в следующем: предположим, что есть 5 пунктов в обзоре переработчиков. и мне понравились 3 его предмета. и я уничтожил свое приложение. когда я снова открываю свое приложение, мне нравится еще один элемент, а затем снова уничтожается мое приложение. после этого, когда я снова открываю свое приложение, появляется как только в прошлый раз, который мне понравился. Предыдущие 3 пункта понравились. Я не понимаю, почему это происходит. * Примечание: до сих пор я не добавлял функцию удаления лайков из списка предметов.

Ниже приведен мой логический код:

Общие настройки Модель

public class SharedPref {
    SharedPreferences preferences;
    SharedPreferences.Editor editor ;
    public SharedPref(Context context) {
        // TODO Auto-generated constructor stub
        preferences =context.getSharedPreferences("Stackoverflow", Context.MODE_PRIVATE);
        editor =preferences.edit();
    }

    public  boolean putBoolean(String key, boolean value) {
        editor.putBoolean(key, value);
        return editor.commit();
    }

    public  boolean getBoolean(String key) {
        return preferences.getBoolean(key, false);
    }
    public  boolean putString(String key, String value) {
        editor.putString(key, value);
        return editor.commit();
    }
    public String getString(String key) {
        return preferences.getString(key, null);
    }

    public  boolean putLong(String key, long value) {
        editor.putLong(key, value);
        return editor.commit();
    }

    public  long getLong(String key) {
        return preferences.getLong(key, 0);
    }

    public  boolean putInt(String key, int value) {
        editor.putInt(key, value);
        return editor.commit();
    }
    public  int getInt(String key) {
        return preferences.getInt(key, 0);
    }

    public  boolean putFloat(String key, float value) {
        editor.putFloat(key, value);
        return editor.commit();
    }
    public  float getFloat(String key) {
        return preferences.getFloat(key, 0);
    }
    public boolean remove(String key){
        return editor.remove(key).commit();
    }
    public boolean clear() {
        // TODO Auto-generated method stub
        return editor.clear().commit();
    }

    public void putListString(String key, ArrayList<String> stringList) {
        checkForNullKey(key);
        String[] myStringList = stringList.toArray(new String[stringList.size()]);
        preferences.edit().putString(key, TextUtils.join("‚‗‚", myStringList)).apply();
    }

    public void checkForNullKey(String key){
        if (key == null){
            throw new NullPointerException();
        }
    }

    public ArrayList<String> getListString(String key) {
        return new ArrayList<String>(Arrays.asList(TextUtils.split(preferences.getString(key, ""), "‚‗‚")));
    }
}

Класс адаптера:

Boolean favimageclick=true;
    SharedPref sharedPref;
    ArrayList<String> favlist=new ArrayList<>();

if (sharedPref.getListString("fav")!=null)
        {
            Log.e("StoredData","______"+sharedPref.getListString("fav"));
            for(String data:sharedPref.getListString("fav"))
            {
                if (data.equalsIgnoreCase(String.valueOf(position))) {
                    holder.imageViewFav.setBackgroundResource(R.drawable.ic_favorite);
                }
            }
        }

        holder.imageViewFav.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (favimageclick) {
                    holder.imageViewFav.setBackgroundResource(R.drawable.ic_favorite);
                    favlist.add(String.valueOf(position));
                    sharedPref.putListString("fav",favlist);
                }

            }
        });

1 Ответ

0 голосов
/ 22 апреля 2020

После загрузки избранного вы только устанавливаете изменения в представлении, но не устанавливаете его в favlist. В следующий раз, когда вы добавляете еще один элемент в избранное, вы помещаете его в favlist, но он содержит только одну вещь. И после этого вы сохраняете этот список из одного элемента в общие префы, перезаписывая то, что было раньше.

Когда вы загружаете данные из общих префов, устанавливайте их в favlist.

Кстати, если только список всегда строится с использованием одних и тех же данных в одном и том же порядке, сохранение позиции в избранном вызовет проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...