4

それで、私の友人は今日、アンドロイドスタジオでアンドロイドプログラミングをいじらせました。初心者用アプリケーションの作成を開始し、いくつかの良い結果が得られました。しかし、現在、テキストビューの値を変更するボタンを取得しようとしています。

ボタンとテキストビューのコードは次のとおりです

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add one"
        android:id="@+id/button3"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignRight="@+id/textView"
        android:layout_toRightOf="@+id/button"
        android:onClick="addone"/>

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/counter"
        android:textSize="40dp"
        android:layout_alignTop="@+id/button3"
        android:layout_centerHorizontal="true"/>

テキストビューの値を変更しようとしているコードは次のとおりです。

public void addone(){

    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest);

}

プログラムはコンパイルされて開きますが、ボタンを押すたびにクラッシュします。犯人をこの行に絞り込んだと思いますが、なぜ機能しないのかわかりません

TextView t = (TextView) findViewById(R.id.counter);

何か案は?

4

3 に答える 3

10

オーバーロードされたメソッドが問題です。それは微妙で、経験豊富なプログラマーでさえ犯す可能性のある間違いです。以前自分で作ったことがあります。

TextView.setText(Integer)を呼び出しています。これは、存在しない numtest のリソース ID を持つ文字列をロードしようとします。

代わりにこれを試してください:

public void addone(View v){
    numtest+=1;
    TextView t = (TextView) findViewById(R.id.counter);
    t.setText(numtest+"");
}

これは、代わりにTextView.setText(CharSequence)を呼び出します。これは、実際にやろうとしていることです。

また、Osmium USA が示したように、メソッドの署名が正しくありません。ボタンが押されたコールバック メソッドは、ビューを受け入れる必要があり、パブリックである必要があります。

于 2013-07-30T22:59:01.070 に答える
6

レイアウト要素に実行する関数を指定すると、View を受け入れる名前が検索されます (そのため、XML で複数の要素に同じクリック動作を割り当てると、何がクリックされたかがわかります)。

そうaddone()でなければならないaddone(View v)

ボタンのドキュメントから

これが機能するためには、メソッドがパブリックであり、View を唯一のパラメーターとして受け入れる必要があります。

ウィリアム・モリソンも良い点を持っています。彼が行ったことによって、または整数クラスを使用して、その数値を文字列にする必要があります。

t.setText(Integer(numtest).toString());

また

t.setText(numtest+"");
于 2013-07-30T22:57:24.387 に答える
0

これはうまくいくはずです:

public void addone(View view){
    switch(view.getId())
    {
        case R.id.button3:
            numtest+=1;
            TextView t = (TextView) findViewById(R.id.counter);
            t.setText(Integer.toString(numtest));
        break;
    }
}
于 2013-07-30T23:00:53.583 に答える