Android:检查图片值是否匹配

时间:2011-07-27 18:51:21

标签: android equals drawable image

嗨我正在尝试设置一个检查,看看当前设置的图片是否为x,如果它是x,那么如果它还有其他东西,它会做其他事情。

Button sharebtn = (Button)findViewById(R.id.Sharebtn);
    sharebtn.setOnClickListener(
       new View.OnClickListener()
       {
           public void onClick(View view)
           {
             ImageView picture = (ImageView) findViewById(R.id.BTN);
              if (picture.equals(R.drawable.x)){
                  //do really cool stuff
              }else if (picture.equals(R.drawable.y){
                   //do stuff
              }

           }
       });

使用此代码,按钮只会冻结,不会执行任何操作。它不仅仅显示焦点。

编辑:更多信息 代码用于收藏夹图标。因此,如果用户位于被标记为收藏的页面上,我希望该图标为填充星形,否则为空星形。我遇到的问题是我希望他们能够点击开始执行将页面添加到favs或删除它的代码。我认为最简单的方法是检查当前图标在oncreate中的设置。该图标正常工作,因此它将显示填充如果一个fav和viseversa然而代码,以使其删除或添加到favs(上面的代码片段)不起作用。我也试过了:

    ImageView picture = (ImageView) findViewById(R.id.favsBTN);
            java.io.File file = new java.io.File(persistentCarsDir+"/"+vin);
            if (file.exists()) {
                removefavorite();
                picture.setImageResource(R.drawable.nostar);
            }else if(!file.exists()){
                favorite();
                picture.setImageResource(R.drawable.star);
            }

上面的代码工作^我只是文件路径错误:)

4 个答案:

答案 0 :(得分:1)

在您的代码中,您正在将imageview与整数进行比较,这将无效。

要获得ImageView的drawable,您应该调用getDrawable。并获取资源ID的实际drawable调用getResources()。getDrawable(R.drawable.x)...

但afaik没有办法比较drawables ...... 最简单的方法可能是使用setTag方法进行imageview。因此,每当您更改其drawable时,您都可以将其标记设置为“X”或“Y”

然后检查标签并决定做什么......

编辑: 或者您使用复选框而不是imageview。您只需选中“isChecked”即可查看是否已选中或未选中。 您可以使用“setButtonDrawable”更改复选框的图形以使用您的星标。 如果你不想在填充和未填充的星之间手动切换,请使用一个有状态的drawable,你可以将填充的星号用于“已选中”,而未填充的星则用于未选中...

希望这会有所帮助...

答案 1 :(得分:1)

我认为View.setTag()是您想要做的。在ListAdapter中,为列表创建View对象。

public View getView(int position, View convertView, ViewGroup parent) {
    View view = < create view here >;
    Object imageLocator = < Enough information to locate the image later >
    view.setTag(imageLocator);
    return view;
}

然后在onClickListener

public void onClick(View view)
{
    Object imageLocator = view.getTag();
    if (imageLocator != null) {
        // use imageLocator info to find the image
        // do your really cool stuff
    } else {
        // just do other stuff
    }
}

答案 2 :(得分:0)

这不是这样做的好方法,因为你试图将ImageView与int进行比较(R.drawable.x实际上是一个int)。所以这两个对象永远不会是平等的。您无法将ImageView与drawable进行比较,因为没有相同的对象。 也许您可以更精确地使用上下文,以便我们可以尝试为您的问题提供解决方案?

答案 3 :(得分:0)

R.drawable.x和R.drawable.y是整数,你将它们与一个总是返回false的ImageView进行比较。

您必须将drawable和ImageView转换为同一个对象,然后进行比较。