0

私のプログラムでは、ユーザーがボタンを押したときに、既にあるものに基づいてテキストを別のものに設定したいのですが、機能していません。ボタンをクリックしても何も起こらず、テキストは同じままです。これは、ボタンが作成される xml レイアウトです。彼らは関数 nextVal を呼び出します

<Button
                android:id="@+idk/kbutton1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/zero" />

            <Button
                android:id="@+idk/kbutton3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/x" />

            <Button
                android:id="@+idk/kbutton4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="nextVal"
                android:text="@string/one" />

呼び出される関数

public void nextVal(View view)
    {

        Button b = (Button) findViewById(view.getId());
        System.out.println(b.getText().toString());

        switch(view.getId())
        {
        case R.idk.kbutton4:
            if(b.getText().toString() == "0")
                b.setText("1");
            else if(b.getText().toString() == "1")
                b.setText("x");
            else if(b.getText().toString() == "x")
                b.setText("0");
            break;
        case R.idk.kbutton3:
            if(b.getText().toString() == "0")
                b.setText("1");
            if(b.getText().toString() == "1")
                b.setText("x");
            if(b.getText().toString() == "x")
                b.setText("0");
            break;
        case R.idk.kbutton2:
            if(b.getText().toString() == "0")
                b.setText("1");
            if(b.getText().toString() == "1")
                b.setText("x");
            if(b.getText().toString() == "x")
                b.setText("0");
            break;
        }

    }
4

3 に答える 3

1

コード全体ではなく、これらすべてを切り替えて、@+idk/何をcase R.idk返すかを理解しました。例えば:idview.getId()

<Button
    android:id="@+id/kbutton3"
    ... />

と:

case R.id.kbutton3:

(現在、すべてのボタンでview.getId()返されると思います。)View.NO_ID

于 2012-11-08T19:55:32.060 に答える
0

== 演算子を使用して 2 つの文字列を比較しています。== 演算子は、内容が等しいかどうかではなく、参照が同じかどうかをチェックします。

代わりに、b.getText.ToString().equals("x"); を使用する必要があります。

そうは言っても、いくつか追加の提案があります。findViewById() を使用して、既に渡されているビューを見つけています。findViewById(view.getId()) を置き換えて、代わりにビューをボタンにキャストするだけです。

また、switch ステートメントを削除することもできます。これは、コードが乱雑になる以外に何の役にも立たないからです。どのような場合でもまったく同じことをしているのに、なぜわざわざするのですか?可能性の1つの内容に置き換えるだけです。

したがって、 nextVal() は次のようになります。

    public void nextVal(View view)
    {
        Button b = (Button) view;

        if(b.getText().toString().equals("0")){
                b.setText("1");
        }else if(b.getText().toString().equals("1")){
                b.setText("x");
        }else if(b.getText().toString().equals("x")){
                b.setText("0");
        }
    }
于 2012-11-08T19:52:43.937 に答える
0

== 演算子は、文字列内の文字を比較しません。代わりに .equals() を使用してください。

于 2012-11-08T19:57:57.820 に答える