3

if-else私は Android を初めて使用し、インターネットでいくつかの優れたチュートリアルを見つけたので、ステートメントを使用して簡単なアクティビティを試しました。「正しいものと間違ったもの」を試しています prompt/ 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))たが、間違ったトーストしか表示されません。私は私に促すために正しいことをしているようには見えません。

これが私のクラスの完全なコードです:

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インスタンスとを比較しintています。クリックされたビューを確認する正しい方法は次のとおりです。

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

このようにして、intを別のものと比較していますint

于 2013-02-26T18:45:22.950 に答える