简体   繁体   English

如何保存项目的按钮src状态

[英]How to save button src state for item

I want to create Favorite list for items I'm using SharedPreference for save item to FavoriteList 我想为我正在使用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;
}

There are two methods for add to favorite list and get all item from List 有两种方法可以添加到收藏夹列表并从列表中获取所有项目

For save to favorite list in DetailActivity i use FloatingActionButton 为了保存到DetailActivity中的收藏夹列表中,我使用FloatingActionButton

DetailActivity.class 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
}

With this code i can save to Favorite list But fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star_yellow) don't save when i re-open item How can i save this state? 使用此代码,我可以保存到收藏夹列表中,但是当我重新打开项目时fab.setImageDrawable(ContextCompat.getDrawable(this@DetailActivity, R.drawable.ic_star_yellow)不能保存。

Looks like it's saved but not shown. 看起来已保存但未显示。 You forget to setImageDrawable(...) before click. 您忘记单击前要设置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))
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM