0

ボタンを初期化しました

ボタン button1 = null;

私の活動当初。レイアウトが設定されたら、

final   Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);

onClickはそのように見えます

public void onClick(View v) {
        if(v == button1) {System.out.println("asd");};
        System.out.println(v);
    }

印刷が表示"I/System.out(22758): android.widget.Button@**405632f0**"され、もちろん、println("asd") は表示されません。

もちろん、IDを操作する方がはるかに簡単なので、ボタンごとにButton@ **コードを取得したくありません。

誰かが私が間違ったことを考えていますか?

4

4 に答える 4

2

これの代わりに

public void onClick(View v) {
        if(v == button1) {System.out.println("asd");};
        System.out.println(v);
    }

これを使って

public void onClick(View v) {
        if(v.getId() == R.id.button1) {System.out.println("asd");};
        System.out.println(v);
    }

どうして??

「==」を使用して比較している場合、同じ参照であるかどうかにかかわらず2つのオブジェクトを比較しているためです。両方のオブジェクトが同じメモリを参照しているかどうかを確認します。

これを解決するには、簡単に比較できる ID を確認します。

于 2013-04-17T14:44:34.460 に答える
1

ボタン 1 はヌルです。したがって、null と not null を比較します。これを変える:

final   Button button1 = (Button) findViewById(R.id.button1);

に:

button1 = (Button) findViewById(R.id.button1);

そしてそれはうまくいくでしょう。ただし、R.id.button1 と v.getId() の数値を比較することをお勧めします。ビュー自体ではありません。

于 2013-04-17T14:46:12.503 に答える
1

@Leonidosが言ったように、変更:

final   Button button1 = (Button) findViewById(R.id.button1);

に:

button1 = (Button) findViewById(R.id.button1);

そして、はい、参考文献を比較できます: Android のソースが表示された場合、2 つの戦略があります。

if (v == mSomeButton) {

そして、次のようなIDを使用するものもあります:

if (v.getId() == R.id.some_button) {
于 2013-04-19T14:37:24.950 に答える
1

R.id.button1は実際には の Integer でR.javaあり、 String や に切り詰めることができるその他のものではありませんbutton1。代わりに次を使用します。

if(v.getId() == R.id.button1)

また、Java では==、非プリミティブ オブジェクトの等価性をテストするために を使用することはできません。使用する必要がありますequals()Java で文字列を比較するにはどうすればよいですか?の違いについて読んでください。

于 2013-04-17T14:45:13.717 に答える