[英]If ImageView drawable equals a known drawable
我有一個imageview,它的imageresource是通過編程設置的。 該圖像的資源可能由3個可繪制對象中的任何一個設置,可使用該類前面的各種變量進行選擇。 3個可繪制對象是:
R.drawable.well_done
R.drawable.try_again
R.drawable.sorry_failed
當我單擊該圖像時,它可能設置了這三個可繪制對象中的任何一個,因此我試圖按照這種方式運行某種方法(我知道這是完全錯誤的,但它可能有助於可視化我所我試圖做)
public void game(){
//STUFF
if(result>10){
imgView.setImageResource(R.drawable.well_done);}
//MORE STUFF
}
public void results_page(){
if(imgView=R.drawable.well_done){
//DO STUFF
}
if(imgView=R.drawable.try_again){
//DO STUFF
}
//etc...
}
這是我的正確代碼。 它比上面我的垃圾可視化要復雜一些,但是我希望您理解我正在嘗試做的事情。
ImageView iv_i;
//...
...onCreate(Bundle savedInstanceState){
//...
result1.setOnClickListener(onClL);
result2.setOnClickListener(onClL);
}
private void game() {
//...
result1.setImageResource(R.drawable.well_done);
result1.setTag(R.drawale.well_done)
result2.setImageResource(R.drawable.try_again);
result2.setTag(R.drawable.try_again);
//...
}
private OnClickListener onClL = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.result1:
ic_i = result1;
iv_i.setTag(result1.getTag());
break;
case R.id.result2:
iv_i = result2;
ic_i.setTag(result2.getTag());
break;
}
gotoResource();
}
};
private void gotoResource(){
Integer integer = (Integer) iv_i.getTag();
switch(integer){
case R.drawable.well_done:
//STUFF
break;
case R.drawable.try_again:
//STUFF
break;
case R.drawable.sorry:
//STUFF
break;
}
}
當我運行此命令時,在包含iv_i.setTag(result1.getTag());
的行上獲得nullpointerexception iv_i.setTag(result1.getTag());
我怎么了? 還是我應該如何正確地做到這一點,或者另一種更容易做到的方式? 也許將drawable轉換為字符串,然后對該字符串執行if語句,例如:(也知道這是完全錯誤的,但只是為了可視化)
String resource = imgView.getDrawable().toString();
if(resource.equals("R.drawable.well_done")){
//DO SOMETHING
}
謝謝
建議不要在ImageView上依賴確切的可繪制對象,而建議在ImageView上設置一個標簽以指示其處於哪個狀態。我最近在類似的問題(確定按鈕是否處於活動狀態)上使用了這種方法,並且效果很好為了我。
private static enum MessageViewType { SUCCESS, TRY_AGAIN, FAILURE }
public void game(){
//STUFF
if (result > 10){
imgView.setImageResource(R.drawable.well_done);}
imgView.setTag(R.id.image_view_status, MessageViewType.SUCCESS); // define image_view_status as a resource
}
//MORE STUFF
}
...
private void gotoResource(){
MessageViewType messageType = (MessageViewType) iv_i.getTag(R.id.image_view_status);
if (messageType == MessageViewType.SUCCESS) {
//STUFF
} else if (messageType == MessageViewType.TRY_AGAIN) {
// STUFF
} else if (messageType == MessageViewType.FAILURE) {
//STUFF
}
}
您可以在任何資源文件中定義image_view_status
id。 我個人使用文件res
> values
> activity_resources.xml
,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="image_view_status" type="id" />
</resources>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.