首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从子子活动中获得结果码?

如何从子子活动中获得结果码?
EN

Stack Overflow用户
提问于 2014-01-21 22:03:12
回答 1查看 257关注 0票数 0

假设我有三项活动。活动A启动活动B,活动B启动活动C。

在活动A中我有代码

代码语言:javascript
运行
复制
Intent i = new Intent(A.this, B.class);
startActivityForResult(i, SOME_NUMBER);

在活动B中,我有一个代码:

代码语言:javascript
运行
复制
Intent i = new Intent(B.this, C.class);
finish(); // this activity should die and start the C activity
startActivityForResult(i, SOME_NUMBER);

最后,在活动C中,我有以下代码:

代码语言:javascript
运行
复制
setResult(RESULT_OK);
finish();

我的问题是活动A没有收到活动C所放置的resultCode。活动A中的onActivityResult( int,int意图)方法如下所示:

代码语言:javascript
运行
复制
switch(requestCode){
case SOME_NUMBER:
    if(resultCode == RESULT_OK){
        // the activity C has returned RESULT_OK
    }else if(resultCode == RESULT_CANCELED){
        // the activity C has returned RESULT_CANCELED
    }
break;
}

它总是输入else if(resultCode == RESULT_CANCELED)。

我想知道如何将正确的resultCode从C活动传递给A活动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 13:27:32

finish()- -在您的活动完成并应该关闭时调用它。因此,您总是得到结果代码0 (RESULT_CANCELED = 0)。

示例

first_layout.xml:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 <TextView
  android:id="@+id/textView"
     android:layout_width="fill_parent" 
     android:layout_height="70px"/>
</LinearLayout>

FirstActivity.java:

代码语言:javascript
运行
复制
package com.example.startforresultdemo;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class FirstActivity extends Activity {
     TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);      
        textView = (TextView)this.findViewById(R.id.textView);

        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("sampleData", "This is Sample Data");
        startActivityForResult(intent, 1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.first, menu);
        return true;
    }

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if(resultCode==RESULT_OK && requestCode==1){
       String msg = data.getStringExtra("returnedData");
       textView.setText(msg);
      }else{
          Log.i("babu", "requestCode "+requestCode+" resultCode "+resultCode);
          //String msg = data.getStringExtra("returnedData");
           textView.setText("requestCode "+requestCode+" resultCode "+resultCode);
      }
     }

}

SecondActivity.java:

代码语言:javascript
运行
复制
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SecondActivity extends Activity{

     Intent intent;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      intent= getIntent();
      String msg = intent.getStringExtra("sampleData");
      msg += ", Added at Second";

      Intent intent2 = new Intent(this, ThirdActivity.class);
      intent2 .putExtra("sampleData", msg);   
      startActivityForResult(intent2, 10);
      //finish();
     }

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if(resultCode==RESULT_OK && requestCode==10){
       String msg = data.getStringExtra("returnedData");
       intent.putExtra("returnedData", msg);
       setResult(RESULT_OK, intent);
       finish();
      }
     }



}

ThirdActivity.java:

代码语言:javascript
运行
复制
package com.example.startforresultdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class ThirdActivity extends Activity{    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Intent intent= getIntent();
      String msg = intent.getStringExtra("sampleData");
      msg += ", Added at Third";
      intent.putExtra("returnedData", msg);
      setResult(RESULT_OK, intent);
      finish();
     }

}

或者根据您的意愿向类中添加以下代码。你可以从你的third activity中得到结果。

FirstActivity.java:

代码语言:javascript
运行
复制
  if(getIntent().getStringExtra("returnedData") != null){          
              Intent intent= getIntent();
              String msg = intent.getStringExtra("returnedData");           
              textView.setText(msg);

       }else{
           Intent intent = new Intent(this, SecondActivity.class);
           intent.putExtra("sampleData", "This is Sample Data");          
           startActivity(intent);
       }

       SecondActivity.java:
      intent= getIntent();
      String msg = intent.getStringExtra("sampleData");
      msg += ", Added at Second";     
      Intent intent2 = new Intent(this, ThirdActivity.class);
      intent2 .putExtra("sampleData", msg);     
      finish(); 
      startActivity(intent2);

      ThirdActivity.java
      Intent intent= getIntent();
      String msg = intent.getStringExtra("sampleData");
      msg += ", Added at Third";
      Intent intent1 = new Intent(this, FirstActivity.class);
      intent1.putExtra("returnedData", msg);
      startActivity(intent1);
      finish();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21270002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档