10

私は Android 用のアプリを作成しようとしています。このチュートリアルに従っています http://developer.android.com/training/basics/firstapp/starting-activity.html

部分があります

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}

次に、このチュートリアルに従い、パラメーターを削除するまですべてが機能しましたView view

私の質問は、なぜそれを削除するたびに、関数は次のとおりです。

/** Called when the user clicks the Send button */
public void sendMessage() {
    // Do something in response to button
}

アプリを実行すると、強制終了しました。

誰かが私を啓発できますか?ありがとうございました

4

3 に答える 3

13

XML を注意深く見ると、ボタンに次の属性があることがわかります。

android:onClick="sendMessage"

この属性は、ボタンがクリックされたときにメッセージが表示されることを意味します。

public void sendMessage(View view)

が呼び出されます。これはonClick、インターフェースのメソッドOnClickListenerが type のパラメーターを必要とするためViewです。パラメータを削除すると、アンドロイドは引き続きメソッドを呼び出そうとしますsendMessage(View view)が、そのメソッドはもう存在しないため、強制終了します。

パラメータviewは、クリックされた実際のビュー(あなたの場合はボタン)です。これにより、複数のボタンを割り当てて同じメソッドを呼び出し、メソッド内でどのボタンがクリックされたかを確認できます。

パラメータのないメソッドが必要な場合は、XML ではなくコードで割り当てる必要があります。XMLを次のように変更します

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:id="@+id/send_button" />

android:onClick(属性が削除され、追加されていることに注意してandroid:idください。)次に、メソッドのアクティビティにonCreate次の行を追加します。

this.findViewById(R.id.send_button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        sendMessage();
    }
}

ご覧のとおり、これはかなり多くのコードを記述しますが、必要に応じて柔軟性が向上します。

于 2012-12-20T11:27:42.460 に答える
5

メソッド (通常は と呼ばれるonClick(View view)) メソッドは、パラメーター (関連付けられているビュー) を取ります。関数の詳細については、 http://developer.android.com/reference/android/view/View.OnClickListener.htmlを参照してください。パラメータを省略した場合、それが機能するとは思わないでしょう?

于 2012-12-20T11:25:36.090 に答える
2

この種のものを xml に入れると:

android:onClick="sendMessage" 

Android フレームワークは、ボタンに OnClickListener を追加します。この「自動的に」生成された OnclickListener は、「sendMessage」という名前のメソッドを View 型の 1 つの引数で呼び出そうとします。

このメソッドが存在しない場合、単純にクラッシュします。

于 2012-12-20T11:28:58.713 に答える