Android ImageButton,使用ViewPager布局获取ImageResource

时间:2017-05-28 22:17:19

标签: android android-imagebutton

我目前正在学习一些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);
    }

1 个答案:

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