-1

「onActivityResult(int, int, Intent) is undefined for the type Object」という「onActivityResult」のエラーが表示されます

私は同じ問題を抱えている人々を見てきました. それらを再配置しようとしましたが、ますますエラーが発生し続けています。

うまくいけば、誰かがこれで私を助けてくれるでしょう:

package com.website.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.util.Log;
import android.widget.EditText;

public class ListmenuActivity extends Activity {

@Override
protected void onCreate(Bundle saveInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(saveInstanceState);
    setContentView(R.layout.activity_listmenu);

    EditText CPU = (EditText) findViewById(R.id.autoCompleteTextView4);
    CPU.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent CPUList = new Intent(getApplicationContext(),
                    CPUList.class);
            startActivityForResult(CPUList, 1);

        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        if (requestCode == 1)
            ;

        Intent i = getIntent();
        String product = data.getStringExtra("product");
        EditText CPU = ((EditText) findViewById(R.id.autoCompleteTextView4));
        CPU.setText(product);

    }

    EditText RAMList = (EditText) findViewById(R.id.autoCompleteTextView1);
    RAMList.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent RAMList = new Intent(getApplicationContext(),
                    RAMList.class);
            startActivityForResult(RAMList,1);

        }

        protected void onActivityResult(int requestCode, int resultCode,
                Intent data) {

            super.onActivityResult(requestCode, resultCode, data);

            if (resultCode == RESULT_OK) {

                if (requestCode == 1)
                    ;

                Intent i = getIntent();
                String product = data.getStringExtra("product");
                EditText RAM = ((EditText) findViewById(R.id.autoCompleteTextView4));
                RAM.setText(product);

            }
        }

    });

}

}
4

3 に答える 3

1
RAMList.setOnClickListener(new View.OnClickListener() {
    // ...
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // ...
    }
});

これは期待どおりには機能しません。そのonActivityResultメソッドは決して呼び出されません。

onActivityResultは のメソッドでありActivity、そのアクティビティが を介して起動した別のアクティビティの結果を受け取るたびに、Android ランタイムによって呼び出されますstartActivity(ForResult)View.OnClickListenerメソッドを持たないインターフェースのみを実装するクラスでそれを定義しようとしていますonActivityResult。スーパークラスやインターフェースのメソッドをオーバーライドするのではなく、特別な目的を持たない単なる新しいメソッドです。

そのクラス インスタンスを に渡しています。setOnClickListenerこれは、呼び出しのみに関係しています。onClickこれはView.OnClickListenerインターフェイスにあるためです。そのオブジェクトにメソッドがあることを認識せずonActivityResult、単に気にしません

これを機能させたい場合は、そのコードonActivityResultListmenuActivity. Activityそのクラスは を継承しているonActivityResultため、 によって起動されたすべてのアクティビティに対して呼び出されstartActivity(ForResult)ます。与えられた結果に対して何をすべきかがわかるように、2 つの別々の起動を区別する必要があります。Android が を提供するのはそのためですrequestCode。異なる起動に異なる を与えるrequestCodeと、結果を で受け取るときにそれらを分離できますonActivityResult

したがって、ListmenuActivity.onActivityResultメソッドは次のようになります。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        // Handle result of CPUList
    } else if (requestCode == 2) {
        // Handle result of RAMList
    }
    super.onActivityResult(requestCode, resultCode, data);
}

startActivityForResult(CPUList, 1)と でサブアクティビティを起動しますstartActivityForResult(RAMList, 2)

(補足: 2 つの異なる変数RAMList( anEditTextと an Intent) を同じスコープで指定すると、非常に混乱します。)

于 2013-08-12T10:10:37.937 に答える
0

すでにonActivityResult()2 回定義する必要はないと言われています。

別のことは、間違っている2番目について言及していたことですonActivityResult()onClickListener()

コードの間違ったポイント

  1. onClickListener() に onActivityResult() を含めることはできません。
  2. ですでに行っているので、でfindViewById()行う必要はありませんonActivityResult()onCreate().

括弧の欠落の問題

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   // your code
    if (requestCode == 1) {
        Intent i = getIntent();
        String product = data.getStringExtra("product");
        CPU.setText(product);
    }
}

この onActivityResult() をこれらのものに置き換えるだけです。

于 2013-08-12T10:09:57.007 に答える
0

電話する必要はないと思います:

super.onActivityResult(requestCode, resultCode, data);

このコードは何もしません:

if (requestCode == 1)
    ;

削除できます。

于 2013-08-12T10:04:20.290 に答える