Android ImageButton,获取带有ViewPager布局的ImageResource

Android ImageButton, get ImageResource with ViewPager layout

我目前正在学习一些 Android 并开发我的第一个应用程序。我使用包含 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,而不是用消息 "No favourite anymore..." 再次将 ImageButton 设置为 heart。原因:仍然存储

nofav = false;

所以我的问题是。如何获取视图的当前 ImageResource?有了这些信息,我可以为每个新视图设置 nofav 变量。

也许有人对如何处理它有更好的想法。谢谢!

解决方案 - Veneets 的 Tag 创意非常适合我。刚刚添加了消息吐司。

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);
    }

您可以使用标签维护 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);
    }