[英]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.