0

アクティビティ (メイン) があり、それにボタンを挿入しました。ユーザーがボタンを押すと、2 つのラジオ ボックスを含むダイアログ ボックスが表示されます。どのラジオボタンが選択されているかに基づいて「1」または「0」の値を「ntv」に設定し、メインアクティビティで「ntv」値を使用したいのですが、これは「ntv」値をメインアクティビティに転送しないようです。私のコードの何が問題なのですか?

      final CharSequence[] chan = {"Minutes", "Seconds"};
        builder = new AlertDialog.Builder(Main.this);
        builder.setTitle("Please Select:");
        builder.setSingleChoiceItems(chan, 0, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                if(chan[item]=="Minutes")
                {
                    Toast.makeText(getApplicationContext(), "Minutes", Toast.LENGTH_SHORT).show();
                    ntv="1";    
                }
                else if (chan[item]=="Seconds")
                {
                    Toast.makeText(getApplicationContext(), "Seconds", Toast.LENGTH_SHORT).show();
                    ntv="0";
                }
            }
        });
        AlertDialog alert = builder.create();
        alert.show();

「ntv」を文字列として定義しました。これは、「ntv」を比較して「0」か「1」かをチェックする際のコードの一部です。

  ImageView set1= (ImageView) findViewById(R.id.set1);
            ImageView set2= (ImageView) findViewById(R.id.set2);
    if (ntv.equals("0")) {
        set1.setVisibility(View.INVISIBLE);
    }
            if (ntv.equals("1")) {
        set2.setVisibility(View.INVISIBLE);
    }

そして、(set1) も (set2) も見えなくなるわけではないので、「ntv」には価値がないことに気づきます。

4

3 に答える 3

1

.equals文字列比較NOTで行う必要があります==

このため、if ステートメントがトリガーされる可能性はほとんどありません。

            if(chan[item].equals("Minutes"))
            {
                Toast.makeText(getApplicationContext(), "Minutes", Toast.LENGTH_SHORT).show();
                ntv="1";    
            }
            else if (chan[item].equals("Seconds"))
            {
                Toast.makeText(getApplicationContext(), "Seconds", Toast.LENGTH_SHORT).show();
                ntv="0";
            }
于 2012-11-23T22:35:37.833 に答える
1

equals()これはすべて問題ないように見えます(文字列比較の代わりに使用する提案を除いて、==あなたが言うように、それは機能します(それは良い習慣ではありません)。

(すべてのコードを確認せずに) 考えられる唯一のことは、変数のスコープntvが間違っていることです。メソッド内で変数を宣言しましたか? クラスのインスタンス変数として定義する必要があります (つまり、メソッド内ではありません)。

于 2012-11-24T21:34:10.137 に答える
0

使用する完全なコードと、可視性を変更するコードを呼び出す方法は明確ではありません。例の下

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AlertDialog.Builder builder;

    final CharSequence[] chan = {"Minutes", "Seconds"};
    builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Please Select:");
    builder.setSingleChoiceItems(chan, 0, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            if(chan[item].equals("Minutes")) {
                showToast("Minutes");    
            } else if (chan[item].equals("Seconds")) {
                showToast("Seconds");
            }
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}

private void showToast(String s){
    Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}

showToast 関数の代わりに、関数を使用して可視性を変更できます

于 2012-11-23T23:32:58.057 に答える