3

我是 Android 新手,在网上找到了一些不错的教程,所以我尝试了一个简单的活动,带有一个if-else声明。我正在尝试“正确和错误”提示/ Toast

Button page1 = (Button) findViewById(R.id.button2);
       page1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                final ImageView iv1 = (ImageView) findViewById(R.id.imageView1);
                if (iv1.equals(R.drawable.airplane1)) {
                    Toast.makeText(getApplicationContext(), "Correct",
                            Toast.LENGTH_SHORT).show();
                } else if (iv1.equals(R.drawable.airplane2)) {
                    Toast.makeText(getApplicationContext(), "Please put an answer",
                            Toast.LENGTH_SHORT).show();
                } else if (iv1.equals(R.drawable.airplane3)){
                    Toast.makeText(getApplicationContext(), "Wrong",
                            Toast.LENGTH_SHORT).show();
                }
            }

       });

我不确定我的if-else陈述有什么问题,但从不提示。我尝试删除(iv1.equals(R.drawable.airplane3))(iv1.equals(R.drawable.airplane2))然后它只显示错误的 Toast。我似乎无法正确提示我。

这是我班级的完整代码:

public class MainActivity extends Activity {
private static final Random imagerandom = new Random();

private static final Integer[] Imagesnumber = 
    { R.drawable.airplane1, R.drawable.airplane2, R.drawable.airplane3, };
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Integer a = Imagesnumber[imagerandom.nextInt(Imagesnumber.length)];
    final ImageView iv = (ImageView) findViewById(R.id.imageView1);

    View nextButton = findViewById(R.id.button1);
    nextButton.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View V) {
              int resource = Imagesnumber[imagerandom.nextInt(Imagesnumber.length)];
              iv.setImageResource(resource);
         }
    });
    Button page1 = (Button) findViewById(R.id.button2);
       page1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                final ImageView iv1 = (ImageView) findViewById(R.id.imageView1);
                if (iv1.equals(R.drawable.airplane1)) {
                    Toast.makeText(getApplicationContext(), "Correct",
                            Toast.LENGTH_SHORT).show();
                } else if (iv1.equals(R.drawable.airplane2)) {
                    Toast.makeText(getApplicationContext(), "Please put an answer",
                            Toast.LENGTH_SHORT).show();
                } else if (iv1.equals(R.drawable.airplane3)){
                    Toast.makeText(getApplicationContext(), "Wrong",
                            Toast.LENGTH_SHORT).show();
                }
            }

       });




}

}
4

4 回答 4

2

R.drawable.airplane*是一个 int,这意味着您将 ImageView 对象与一个 int 进行比较,这绝不是真的。用于iv.getDrawable().equals(getResources().getDrawable(R.drawable.airplane1));与 Drawable 对象进行比较。

这可能不是性能方面的最佳选择,您可能希望将显示图像的索引作为类变量来跟踪,并在此基础上做一个条件(或类似的东西)。

于 2013-02-26T18:44:58.877 回答
2
iv1.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.airplane1).getConstantState())                                                                                                                                                                                                                                                                                                                                                                                                                                              
于 2013-02-26T19:19:51.263 回答
1

您无法将 ImageView 的类型与 int 的类型进行比较

iv1.equals(R.drawable.airplane1)

这是错误的

试试这个

iv.getDrawable()==getResources().getDrawable(R.drawable.airplane1)

反而

于 2013-02-26T18:45:20.130 回答
0

您正在比较ImageView实例和ints,检查单击了哪个视图的正确方法是:

if (iv1.getId() == R.id......) { ...

这样您就可以将一个int与另一个进行比较int

于 2013-02-26T18:45:22.950 回答