2

次のコードでこのメッセージが表示されます。

public boolean onOptionItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.x:
            Log.i(Home, "klick");

        case R.id.y:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

そして、私は常にこのエラーを受け取ります:

Home型のメソッドonOptionItemSelected(MenuItem)は、スーパークラスメソッドをオーバーライドする必要があります

私はインターネット全体を検索しましたが、stackoverflowにいくつかの投稿がありましたが!私のコンパイラは1.6に設定されており、私のプロジェクトにも例外はありません。

なぜスーパークラスメソッドをオーバーライドする必要があるのですか?このメソッドはスーパークラスのメソッドではありません。super.onOptionsを使用しています...?

@Overrideをどこかで見たことがあり、コードがないと機能しないように見えるので、@Overrideを使用したいと思います。

これが私の最初の質問ですので、何か忘れても頑張らないでください。

4

2 に答える 2

4

onOptionsItemSelected(..)を試してください

's'がありません、onOptionItemSelected(..)があります

于 2012-11-05T22:39:30.757 に答える
0

コンパイラがスーパークラスメソッドを見つけられない理由はわかりませんが、これが問題です。

@Overrideでメソッドにアノテーションを付けた場合、コンパイラはスーパークラスでメソッドを見つけようとしますが、見つかりません(perphaps、メソッドの最初の出現は直前ではなく、2つまたは3つのクラスの前であるためです。

解決策:@Overrideアノテーションを削除します。コンパイラはスーパークラスメソッドをチェックせず、コードは正常にコンパイルされます。

コードはアノテーションなしで正常に機能します。

PD。私のひどい英語でごめんなさい。ç

Upps。それは本当です。メソッドは、大きな「s」を指定したonOptionsItemSelectedです。オーバーライドアノテーションが機能しないのはそのため、コンパイラはスーパークラスメソッドを見つけられません。

于 2014-04-06T21:46:29.467 に答える