14

first activityを呼び出す場所からのコードは次のとおりsecond Activityです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){       
    startActivityForResult(new Intent("chap.two.Chapter2Activity2"),request_Code);          
  }    
  return false;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == request_Code) {
    if (resultCode == RESULT_OK) 
      Toast.makeText(this,data.getData().toString(),Toast.LENGTH_SHORT).show();             
  }
}

そして、ここにコードがありますchap.two.Chapter2Activity2

Button n = (Button) findViewById(R.id.btn_OK);
n.setOnClickListener(new View.OnClickListener() {               
   @Override
   public void onClick(View v) {
     // TODO Auto-generated method stub

     Intent data = new Intent();
     //---get the EditText view---
     EditText txt_username =(EditText) findViewById(R.id.txt_username);
     //---set the data to pass back---
     data.setData(Uri.parse(txt_username.getText().toString()));
     setResult(RESULT_OK, data);
     //---closes the activity---
     finish();

   }
});

ここでは、setResult(RESULT_OK, data)引数が 2 つあるのに3 つあることがわかります。3 番目のパラメーターの値を取得
onActivityResult(int requestCode, int resultCode, Intent data)する方法を知りたいですか? onActivityResultそれがどのように機能するか、誰でも教えてもらえますか? なぜこのエラーではないのですか?

4

2 に答える 2

21

Activity.startActivityForResult() を呼び出すときは、requestCode. onActivityResult()後で、どのアクティビティがデータを送信しているかを判断するために、このリクエスト コードが必要になります。は持ち越されているので、requestCode再度供給する必要はありません。setResult()requestCode

これdataは、起動されたインテントから返されたインテント データです。通常extras、呼び出されたインテントを設定するときにこのデータを使用します。

次の例を検討してください。

2 番目の活動を呼び出す

Intent i = new Intent(MainActivity.this, CheckActivity.class);
startActivityForResult(i, REQUEST_CODE_CHECK);

2 回目のアクティビティで、インテントの結果を設定

getIntent().putExtra("TADA", "bla bla bla");
setResult(RESULT_OK, getIntent());
finish();

最初のアクティビティ、ONACTIVITYRESULT() に戻る

if(requestCode == REQUEST_CODE_CHECK && resultCode == RESULT_OK){
    text1.setText(data.getExtras().getString("TADA") );
}

ほらね。Intent dataこれで、値の設定方法と取得方法について理解できたはずです。

于 2012-05-28T20:36:50.273 に答える
4

3 番目のパラメーターは、サブアクティビティ (終了する 2 番目のアクティビティ) から送信した Intent です。

サブアクティビティで計算を実行したり、ユーザー名/パスワードを取得したり、結果をメインアクティビティに送信したりする場合は、データをインテントに配置し、finish() の前にメインアクティビティに戻ります。

その後、メイン アクティビティの onActivityResult(int, int, Intent) で結果を Intent パラメータでチェックインします。

例:: MainActivity:

public void onClick(View view) {
  Intent i = new Intent(this, subActivity.class);
  startActivityForResult(i, REQUEST_CODE);
} 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
    if (data.hasExtra("username") && data.hasExtra("password")) {
      String username =  data.getExtras().getString("username");
      String password =  data.getExtras().getString("password");

    }
  }

サブアクティビティ::

@Override
public void finish() {
  // Create one data intent 
  Intent data = new Intent();
  data.putExtra("username", "Bla bla bla..");
  data.putExtra("password", "*****");
  setResult(RESULT_OK, data);
  super.finish();
} 
于 2014-04-10T13:39:31.107 に答える