第三个Activity如何传值给第一个Activity?

li-xyz 2018-03-29 02:58:59
现在有 Activity A B C

A 启动 B
B 启动 C,并且调用 finish 方法关闭自己
C 调用 setResult(100,intent) 方法,然后同样 finish 自己

A 的 onActivityResult 会被调用,但是 resultCode 却是0,intent 也是 null

请问是什么原因啊?
...全文
2004 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
r00_a2lBUR 2018-04-25
  • 打赏
  • 举报
回复
存在一个类里也行,我的资源那里有类似的一个Demo
蒙多996 2018-04-24
  • 打赏
  • 举报
回复
简单数据的话,保存在本地,然后随时随地的获取就可以了。
chinahbbt 2018-04-24
  • 打赏
  • 举报
回复
使用eventbus,不要用什么onresult什么的
AItsuki 2018-04-24
  • 打赏
  • 举报
回复
如果你的A估计是SingleTask模式,不支持onActivityResult,在你启动B的时候,onActivityResult会立马调用。
peacejay 2018-04-20
  • 打赏
  • 举报
回复
不知道理解错没有,看你描述是想C界面返回值给A界面 用EventBus可以任何界面传递,最简单的写一个公共的变量赋值比如
public static String sipName = "";
,公共的数据如果怕销毁可以存轻量缓存ACache里面
头发还没秃a 2018-04-19
  • 打赏
  • 举报
回复
问题大了,帮你把三个界面的代码都改了一遍,并标上注释了:

public class OneActivity extends AppCompatActivity {

	static final int INTENT_ONE = 1001;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);
		
	//点击跳转至 TwoActivity
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(this, TwoActivity.class), INTENT_ONE);
            }
        });
 
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
        //接收 TwoActivity 界面返回的值
	if(requestCode == INTENT_ONE && resultCode  == RESULT_OK && data != null) {
		String d = data.getStringExtra("data");
		Log.v("zzw",quest+" "+result+" "+d);
	}
    }
}


 
public class TwoActivity extends AppCompatActivity {
 
    static final int INTENT_TWO = 1002;
    
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
 
	//点击跳转至 ThreeActivity
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(this, ThreeActivity.class), INTENT_TWO);
            }
        });
 
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		//接收 ThreeActivity 界面返回的值,并关闭当前界面把从 ThreeActivity 接收到的值传递给上一个界面(OneActivity)
		if(requestCode == INTENT_TWO && resultCode  == RESULT_OK && data != null) {
			setResult(RESULT_OK, data)
			finish()
		}
    }
}


 
public class ThreeActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
 
	//点击按钮关闭 ThreeActivity 并返回上一个界面(TwoActivity)
	//同时传值 "from Three of message" 回 上一个界面(TwoActivity)
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data", "from Three of message");
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}
kingiis 2018-04-19
  • 打赏
  • 举报
回复
很简单 用 基础的Service 老大哥 绑一个是一个,只要被绑的actvity没死绝,找个service就活着,拿数据还不是跟玩着一样
qq_31461209 2018-04-17
  • 打赏
  • 举报
回复
直接C跳A getIntent不是也可以吗。。。
moonFY 2018-04-02
  • 打赏
  • 举报
回复
Rxbus Eventbus sharedpereference sqlite 文件 静态方法 都可以,另外你的写法错了,A startActivityForResult B , B startActivityForResult C,A 、 B 不要 finish
weixin_41926361 2018-03-30
  • 打赏
  • 举报
回复
万能的接口在等着你
sinat_bond 2018-03-30
  • 打赏
  • 举报
回复
万能的接口在等着你
sds_buct 2018-03-30
  • 打赏
  • 举报
回复
引用 8 楼 weixin_41926361 的回复:
万能的接口在等着你
阿道夫小狮子 2018-03-29
  • 打赏
  • 举报
回复
你干嘛要局限用intent传递数据呢?如果是少量数据你可以用sp数据存储了在A页面去读取啊,如果数据多,你可以用数据库啊
十二月的消亡 2018-03-29
  • 打赏
  • 举报
回复
只是要简单的传值的话,在第一个Activity写一个 public static int setValues(int values){ mValues = values; }
键盘舞者113 2018-03-29
  • 打赏
  • 举报
回复
你这有问题啊,我写了个例子,A收不到消息啊,你写的代码没问题吗
package com.example.one;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.example.aidlserver.R;

public class OneActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(OneActivity.this, TwoActivity.class);
                startActivity(intent);
            }
        });

    }

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

        int quest = requestCode;
        int result = resultCode;
        String d = data.getStringExtra("data");
        Log.v("zzw",quest+" "+result+" "+d);
    }
}
package com.example.one;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.example.aidlserver.R;

public class TwoActivity extends AppCompatActivity {

     static final int INTENT_TWO = 1001;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(TwoActivity.this, ThreeActivity.class);
                intent.putExtra("data","from two of message");
                startActivityForResult(intent, INTENT_TWO);
                finish();
            }
        });

    }

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

        int quest = requestCode;
        int result = resultCode;
        String d = data.getStringExtra("data");
        Log.v("zzw",quest+" "+result+" "+d);
    }
}
package com.example.one;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.example.aidlserver.R;

public class ThreeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);


        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Intent intent = new Intent(OneActivity.this, TwoActivity.class);
                //startActivity(intent);
                Intent intent = new Intent(ThreeActivity.this,TwoActivity.class);
                intent.putExtra("data", "from Three of message");
                setResult(RESULT_OK, intent );
                finish();
            }
        });


    }

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

        int quest = requestCode;
        int result = resultCode;
        String d = data.getStringExtra("data");
        Log.v("zzw",quest+" "+result+" "+d);
    }
}
li_zimu 2018-03-29
  • 打赏
  • 举报
回复
eventbus了解一下
开发者_android 2018-03-29
  • 打赏
  • 举报
回复
可以注册个广播,也可以用保存数据的方式。
  • 打赏
  • 举报
回复
照你的思路的话 不应该finish B 要在B中onActivityResult 然后再传递给A eventbus有没有兴趣了解一下?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧