这个问题很简单。 例如,主要活动和主要活动2有2个活动。 如何从主要活动2向主要活动发送字符串(例如)。 如果主要活动2得到字符串,请说。它调用一个函数来改变那个字符串。 然后如何将更改后的字符串发送回主要活动?
答案 0 :(得分:0)
标准方式:
如果要将原始数据从Activity1发送到Activity2,则需要使用Intent
。例如,如果您只想发送一个字符串:
public class Activity1 extends Activity {
public static final String EXTRA_STRING = "extra_string";
private void sendString(String s) {
Intent intent = new Intent(this, Activity2.class);
intent.putExtra(EXTRA_STRING, s);
startActivity(intent);
}
}
假设您在Activity2中更改了该字符串并希望将结果返回到Activity1,则需要在Activity1中使用startActivityForResult()
,在Activty2中使用setResult()
。
例如:
public class Activity1 extends Activity {
public static final String EXTRA_STRING = "extra_string";
private static final int REQUEST_CODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
// Get the string back
String changedString = data.getStringExtra(Activity2.EXTRA_STRING);
}
}
private void sendString(String s) {
Intent intent = new Intent(this, Activity2.class);
intent.putExtra(EXTRA_STRING, s);
startActivityForResult(intent, REQUEST_CODE);
}
}
在Activity2中:
public class Activity2 extends Activity {
public static final String EXTRA_STRING = "string_extra";
private String myString;
@Override
public void onCreate(Bundle bundle) {
// receive the string from activity1
if (getIntent() != null) {
myString = getIntent().getStringExtra(Activity1.EXTRA_STRING);
}
}
// Send the string back to activity1
private void sendBack() {
Intent data = new Intent();
data.putExtra(EXTRA_STRING, myString);
setResult(RESULT_OK, data);
finish();
}
}
该方法的缺点是您只能发送原始变量。如果要发送对象,则必须实现Parcelable
或Serializable
。
快速简便的方法:
您可以使用EventBus发送任何类型的变量,活动,服务或任何您想要的任何复杂对象。请查看Documentation以了解如何使用它。这真的很快捷。
答案 1 :(得分:0)
从主要活动1发送字符串:
Intent intent = new Intent(this, MainActivity2);
intent.putExtra("string", stringVal);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
然后在主要活动2中,收到字符串:
String str = getIntent().getExtras().getString("string");
然后只需更改值并将其发送回主要活动1,如果需要,您可以在onResume中获取意图,但检查空值。