我目前正在学习一些Android并开发我的第一个App。我使用包含ImageButton的ViewPager:
<ImageButton
android:id="@+id/favourite_button"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:onClick="onClickFav"
android:scaleType="fitCenter"
android:src="@drawable/heart" />
在我的ViewPager适配器中,我尝试按照onClick方法:
private boolean nofav = true;
public void onClickFav(View v) {
ImageButton favouriteButton = (ImageButton) v;
if (nofav) {
favouriteButton.setImageResource(R.drawable.heart_red);
Toast.makeText(SuggestionActivity.this, "Woah, new favourite!",
Toast.LENGTH_SHORT).show();
nofav = false;
} else {
favouriteButton.setImageResource(R.drawable.heart);
Toast.makeText(SuggestionActivity.this, "No favourite anymore...",
Toast.LENGTH_SHORT).show();
nofav = true;
}
}
单击ImageButton时,它会更改图像。问题是:我单击一个视图上的按钮(单击后是heart_red)并向右滑动(当前是心脏)。在新视图中,我单击心脏ImageButton。然后,ImageButton应该变成heart_red,而不是再次将ImageButton设置为带有消息的#34;不再喜欢...&#34;。原因:它仍然存储
nofav = false;
所以我的问题是。如何获取视图的当前ImageResource?有了这些信息,我可以为每个新视图设置nofav变量。
也许某人也有更好的想法如何应对。谢谢!
解决方案 - 使用Tag的贴面设计非常适合我。刚刚添加了Message Toast。
public void onClickFav(View v) {
ImageButton favouriteButton = (ImageButton) v;
Boolean isFav = favouriteButton.getTag() == null ? Boolean.FALSE : (Boolean) favouriteButton.getTag();
favouriteButton.setImageResource(isFav ? R.drawable.heart : R.drawable.heart_red);
if (isFav) {
Toast.makeText(SuggestionActivity.this, "No favourite anymore...",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SuggestionActivity.this, "Woah, new favourite!",
Toast.LENGTH_SHORT).show();
}
favouriteButton.setTag(!isFav);
}
答案 0 :(得分:0)
您可以使用代码维护ImageButton
的收藏状态:
public void onClickFav(View v) {
ImageButton favouriteButton = (ImageButton) v;
// Assuming default is false
Boolean isFav = favouriteButton.getTag() == null ? Boolean.FALSE : (Boolean) favouriteButton.getTag();
favouriteButton.setImageResource(isFav ? R.drawable.heart : R.drawable.heart_red);
favouriteButton.setTag(!isFav);
}