Как сохранить состояние кнопки для элемента - PullRequest
0 голосов
/ 03 января 2019

Я хочу создать список избранного для предметов Я использую SharedPreference для сохранения элемента в FavoriteList

public void addFavorite(Context context, TilekItem item) {
    List<TilekItem> favorites = getFavorites(context);
    if (favorites == null)
        favorites = new ArrayList<>();
    favorites.add(item);
    saveFavorites(context, favorites);
}
public ArrayList<TilekItem> getFavorites(Context context) {
    SharedPreferences settings;
    List<TilekItem> favorites;

    settings = context.getSharedPreferences(PREFS_NAME,
            Context.MODE_PRIVATE);

    if (settings.contains(FAVORITES)) {
        String jsonFavorites = settings.getString(FAVORITES, null);
        Gson gson = new Gson();
        TilekItem[] favoriteItems = gson.fromJson(jsonFavorites,
                TilekItem[].class);

        favorites = Arrays.asList(favoriteItems);
        favorites = new ArrayList(favorites);
    } else
        return null;

    return (ArrayList<TilekItem>) favorites;
}

Существует два способа добавления в список избранных и получения всего элемента из списка

Для сохранения в избранном списке в DetailActivity я использую FloatingActionButton

DetailActivity.class

class DetailActivity : AppCompatActivity() {

var isFavorite = false
var textForFavorite = ""
var sharedPreference: SharedPreference? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_detail)
    val tilek = getIntent().getStringExtra("TILEK")
    val type = getIntent().getStringExtra("TYPE")
    val id = getIntent().getIntExtra("ID", 0)

    tilek_detail.text = tilek
    sharedPreference = SharedPreference()

    val item = TilekItem(id, tilek, type)
    isFavorite = checkFavoriteItem(item)

    fab.setOnClickListener { view ->
        if (!isFavorite) {
            isFavorite = true
            textForFavorite = "Added to"
            fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star_yellow))

            sharedPreference!!.addFavorite(this@DetailActivity, item)
        } else {
            isFavorite = false
            textForFavorite = "Removed from"
            sharedPreference!!.removeFavorite(this@DetailActivity, item)
            fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star))

        }
        Snackbar.make(view, "$textForFavorite favourite list", Snackbar.LENGTH_LONG)
            .setAction("Action", null).show()

    }
    initToolbar()

}

fun checkFavoriteItem(checkItem: TilekItem): Boolean {
    val favorites = sharedPreference?.getFavorites(this@DetailActivity)
    val result = favorites!!.contains(checkItem)
    return result
}

С этим кодом я могу сохранить в избранное Но fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star_yellow) не сохраняю, когда я повторно открыть элемент Как я могу сохранить это состояние?

1 Ответ

0 голосов
/ 03 января 2019

Похоже, что оно сохранено, но не показано. Вы забыли setImageDrawable(...) до щелчка.

if (!isFavorite) {
  fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star_yellow))
} else {
  fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...