我有一个以编程方式设置其imageresource的imageview。这个图像可以通过3个drawable中的任何一个设置其资源,这可以使用类中较早的各种变量来选择。 3个抽签是:
R.drawable.well_done
R.drawable.try_again
R.drawable.sorry_failed
当我点击这张图片时,它可能会将这三个drawable中的任何一个设置为它,所以我试图按照这种方式运行一个方法(我知道这是完全错误的,但它可能帮助想象我想要做的事情)
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
我出了什么问题?或者我该如何正确地做到这一点,或者另一种做得更容易的方式呢?也许将drawable转换为字符串,然后对字符串执行if语句,如:(也知道这是完全错误的,但它仅用于可视化)
String resource = imgView.getDrawable().toString();
if(resource.equals("R.drawable.well_done")){
//DO SOMETHING
}
由于
答案 0 :(得分:1)
我建议在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>