如何开始activityforresult 从第 4 次 activity 得到结果
how to get startactivityforresult get result from 4th activity
我从那个 startActivityForResult()
得到 MainActivity
第二个 activtiy
但我想要第四个结果 activity
我应该怎么做?
MainActivity
FirstActivity
secondActivity
ThirdActivity
FourActivity
由此我想要第 4 个 activity 的结果,但是从第二个 activity 到第四个活动是依赖活动
MainActivity.java
public static String MY_RESULT=1000;
intent=new Intent(MainActivity.this,FirstActivity.class);
startActivityForResult(intent,MY_RESULT);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case MY_RESULT:
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
break;
}
}
}
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
SecondActivity.java
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivity(intent);
finish();
ThirdActivity.java
Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
startActivity(intent);
finish();
FourActivity.java
Intent intent = new Intent();
intent.putExtra("KEY", "my data in string");
setResult(RESULT_OK, intent);
finish();
这里 MainActivity.java
我无法得到任何 result.And 我想要 FourActivity.java
的结果。请帮忙
您可以开始每个 activity 的结果并像这样传递结果:
FourthActivity -> ThirdActivity -> SecondActivity -> FirstActivity
在您的第三个、第二个和第一个活动中,使用 onActivityResult
从之前关闭的 Activity
中获取结果。
在第四个 activity 中,您在 setResult()
中设置 RESULT_OK
没问题,但在您的 onActivityResult
中只需删除此:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
}
编码愉快!!
没有简单的方法,你必须使用startActivityForResult()
用于第一到第三Activity并且全部使用setResult()
来监听和传回数据。
示例代码如下:
class FirstActivity extends Activity {
public static int MY_RESULT = 1000;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
startActivityForResult(intent, MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_RESULT && resultCode == RESULT_OK) {
String dataStr = data.getStringExtra("KEY");
Toast.makeText(this, dataStr, Toast.LENGTH_LONG).show();
}
}
}
class SecondActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class ThirdActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(ThirdActivity.this, FourthActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class FourthActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent data = new Intent();
data.putExtra("KEY", "This is a test String");
setResult(RESULT_OK, data);
finish();
}
}
其他可能的解决方案包括:
- 定义您自己的
Singleton
可以在应用程序会话期间保存数据
- 使用
EventBus
- 使用
SharedPreferences
- 使用本地数据库
我从那个 startActivityForResult()
得到 MainActivity
第二个 activtiy
但我想要第四个结果 activity
我应该怎么做?
MainActivity
FirstActivity
secondActivity
ThirdActivity
FourActivity
由此我想要第 4 个 activity 的结果,但是从第二个 activity 到第四个活动是依赖活动
MainActivity.java
public static String MY_RESULT=1000;
intent=new Intent(MainActivity.this,FirstActivity.class);
startActivityForResult(intent,MY_RESULT);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case MY_RESULT:
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
break;
}
}
}
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
SecondActivity.java
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivity(intent);
finish();
ThirdActivity.java
Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
startActivity(intent);
finish();
FourActivity.java
Intent intent = new Intent();
intent.putExtra("KEY", "my data in string");
setResult(RESULT_OK, intent);
finish();
这里 MainActivity.java
我无法得到任何 result.And 我想要 FourActivity.java
的结果。请帮忙
您可以开始每个 activity 的结果并像这样传递结果:
FourthActivity -> ThirdActivity -> SecondActivity -> FirstActivity
在您的第三个、第二个和第一个活动中,使用 onActivityResult
从之前关闭的 Activity
中获取结果。
在第四个 activity 中,您在 setResult()
中设置 RESULT_OK
没问题,但在您的 onActivityResult
中只需删除此:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
}
编码愉快!!
没有简单的方法,你必须使用startActivityForResult()
用于第一到第三Activity并且全部使用setResult()
来监听和传回数据。
示例代码如下:
class FirstActivity extends Activity {
public static int MY_RESULT = 1000;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
startActivityForResult(intent, MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_RESULT && resultCode == RESULT_OK) {
String dataStr = data.getStringExtra("KEY");
Toast.makeText(this, dataStr, Toast.LENGTH_LONG).show();
}
}
}
class SecondActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class ThirdActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(ThirdActivity.this, FourthActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class FourthActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent data = new Intent();
data.putExtra("KEY", "This is a test String");
setResult(RESULT_OK, data);
finish();
}
}
其他可能的解决方案包括:
- 定义您自己的
Singleton
可以在应用程序会话期间保存数据 - 使用
EventBus
- 使用
SharedPreferences
- 使用本地数据库