如何在 运行 activity 中获取额外的内容?
How to get extra content in a running activity?
我想发送用户在当前 activity 中输入的文本(像一个对话,但不是一个 )。 Activity 1 在后台,运行。
到目前为止,我已经尝试过了:
第二个Activity代码:
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
if(companyNameEditText.getText().toString()!=null) {
intent.putExtra("companyName", companyNameEditText.getText().toString());
nameChanged=true;
finish();
}
else{
Toast.makeText(ChangeNameActivity.this,"Please enter a value",Toast.LENGTH_SHORT).show();
}
}
});
第二个 onDestroy Activity:
@Override
protected void onDestroy() {
super.onDestroy();
if(nameChanged)
{
activityFinishedWithChanges= true;
}
}
第一个 Activity 的简历:
@Override
protected void onResume() {
super.onResume();
if(ChangeNameActivity.activityFinishedWithChanges) {
companyNameText = findViewById(R.id.companyNameText);
if (getIntent().hasExtra("companyName")) {
String companyName = getIntent().getStringExtra("companyName");
if (companyName != null) {
if (!companyName.equals("")) {
companyNameText.setText(companyName);
AppUtils.setNameSharedPreference(BrandSettingsActivity.this, AppConstants.organizationName, getIntent().getStringExtra("companyName"));
}
}
}
}
}
我得到的是空值。
如果我没有正确理解你的问题,你想将数据从(第二个 Activity)发送到你之前打开的(第一个 Activity)
因此,从您的第一个Activity调用第二个Activity,使用 startActivityForResult() 方法
例如:
int ACTIVITY_CODE= 1
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, ACTIVITY_CODE);
在您的 SecondActivity 中,将您想要 return 的数据设置回 FirstActivity。
例如:In SecondActivity如果要回传数据:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
现在在您的 FirstActivity class 中为 onActivityResult() 方法编写以下代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTIVITY_CODE) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
希望它能解决您的问题:)
您当前的方法不起作用,因为您创建的用于检索公司名称的 Intent 未以任何方式使用。
您应该使用 ActivityClass 的 ActivityResult
功能。基本概念是这样工作的:
首先,您开始 activity 请求 return 结果 Context.startActivitForResult(Intent,requestCode). The new activity is started and has the oppurtunity to do stuff. When the new activity has retrieved a result it sets its result with Context.setResult(),然后自行完成。
当新 Activity 完成函数 Activity.onActivityResult(requestCode,resultCode,data) is called with the same requestCode, defined in Context.startActivitForResult(Intent,requestCode) and the data and resultCode defined in Context.setResult().
官方文档推荐使用更高级别api:https://developer.android.com/training/basics/intents/result
我想发送用户在当前 activity 中输入的文本(像一个对话,但不是一个 )。 Activity 1 在后台,运行。 到目前为止,我已经尝试过了:
第二个Activity代码:
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
if(companyNameEditText.getText().toString()!=null) {
intent.putExtra("companyName", companyNameEditText.getText().toString());
nameChanged=true;
finish();
}
else{
Toast.makeText(ChangeNameActivity.this,"Please enter a value",Toast.LENGTH_SHORT).show();
}
}
});
第二个 onDestroy Activity:
@Override
protected void onDestroy() {
super.onDestroy();
if(nameChanged)
{
activityFinishedWithChanges= true;
}
}
第一个 Activity 的简历:
@Override
protected void onResume() {
super.onResume();
if(ChangeNameActivity.activityFinishedWithChanges) {
companyNameText = findViewById(R.id.companyNameText);
if (getIntent().hasExtra("companyName")) {
String companyName = getIntent().getStringExtra("companyName");
if (companyName != null) {
if (!companyName.equals("")) {
companyNameText.setText(companyName);
AppUtils.setNameSharedPreference(BrandSettingsActivity.this, AppConstants.organizationName, getIntent().getStringExtra("companyName"));
}
}
}
}
}
我得到的是空值。
如果我没有正确理解你的问题,你想将数据从(第二个 Activity)发送到你之前打开的(第一个 Activity)
因此,从您的第一个Activity调用第二个Activity,使用 startActivityForResult() 方法
例如:
int ACTIVITY_CODE= 1
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, ACTIVITY_CODE);
在您的 SecondActivity 中,将您想要 return 的数据设置回 FirstActivity。
例如:In SecondActivity如果要回传数据:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
现在在您的 FirstActivity class 中为 onActivityResult() 方法编写以下代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTIVITY_CODE) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
希望它能解决您的问题:)
您当前的方法不起作用,因为您创建的用于检索公司名称的 Intent 未以任何方式使用。
您应该使用 ActivityClass 的 ActivityResult
功能。基本概念是这样工作的:
首先,您开始 activity 请求 return 结果 Context.startActivitForResult(Intent,requestCode). The new activity is started and has the oppurtunity to do stuff. When the new activity has retrieved a result it sets its result with Context.setResult(),然后自行完成。 当新 Activity 完成函数 Activity.onActivityResult(requestCode,resultCode,data) is called with the same requestCode, defined in Context.startActivitForResult(Intent,requestCode) and the data and resultCode defined in Context.setResult().
官方文档推荐使用更高级别api:https://developer.android.com/training/basics/intents/result