2011-07-27 60 views
0

嗨我试图设置一个检查,看看如果当前设置的图片是x,如果它是x它做的东西,如果它的东西,它做其他的东西。Android:检查图片值是否匹配

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 
       } 

      } 
     }); 

与此代码按钮只是冻结,并没有做任何事情。它不仅仅显示焦点。

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

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

此代码aboves作品^我刚把文件路径错了:)

+0

建议的findViewById呼叫后,立即加入了一些调试消息 - 如果在检查之前。看看这个函数是否返回。 – Randy

+0

正如在我的答案中提到的...使用imageView.setTag()来“记住”它是否是一个好处,并在onClick中相应地采取行动... 或使用复选框而不是imageview,因此您可以轻松地检查“isChecked”... – jpm

+0

(我在我的答案中添加了信息) – jpm

回答

1

在你的代码中,你正在比较一个imageview和一个整数,这是行不通的。

要获得ImageView的drawable,应该调用getDrawable。而要获得一个资源ID调用getResources()。getDrawable(R.drawable.x)实际绘制...

但据我所知是没有办法比较可绘制... 最简单的方法很可能是对imageview使用setTag方法。所以,你可以将其标签设置为只要更改其绘制的“X”或“Y” ......

然后检查标签,并决定该怎么办...

编辑: 或者你使用一个复选框而不是imageview。您可以简单地检查“isChecked”,以确定它是否已被选中或未选中。 您可以使用“setButtonDrawable”更改复选框的图形以使用您的明星。 如果你不想手动切换填充和不填充的明星,使用一个有状态的drawable,你可以让填充的星星为“已检查”,未填满的星星为未检查...

希望这有助于...

0

这是不这样做的很好的方式,因为你想比较的ImageView的到一个int(R.drawable.x实际上是一个int)。所以这两个对象永远不可能是平等的。您不能将ImageView与drawable进行比较,因为不存在相同的对象。 也许你可以提供一些更精确的使用环境,以便我们可以尝试为您的问题提供解决方案?

+0

以上编辑添加更多信息。 – Nick

0

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

您将不得不将您的drawable和ImageView转换为相同的对象,然后进行比较。

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