gpt4 book ai didi

java - 我可以在 finish() 上传递额外的 Intent 吗?

转载 作者:行者123 更新时间:2023-12-02 11:12:19 26 4
gpt4 key购买 nike

我想知道,是否可以将信息发送到调用 finish() 后返回的 Activity ?

例如,我有一个 Activity SendMessageActivity.class,它允许用户向其提要发布消息。将消息保存到服务器后,我调用 finish()。我应该用新的 Intent 启动我的 MainActivity.class 吗?或者生命周期开发直接完成 SendMessageActivity.class 更好?

我不认为开始一项新 Activity 有什么意义,因为关闭当前 Activity 总是会让您返回到 MainActivity.class。完成当前 Activity 后如何发送额外的字符串?

最佳答案

使用onActivityResult

这可能会帮助您理解onActivityResult

通过使用 startActivityForResult(Intent intent, int requestCode)您可以启动另一个 Activity ,然后在 onActivityResult()接收该 Activity 的结果方法。所以onActivityResult()是从您启动另一个 Activity 的地方开始。

onActivityResult(int requestCode, int resultCode, Intent data)检查这里的参数。请求代码用于从您获得结果的位置进行过滤。这样您就可以使用它们的 requestCode 来识别不同的数据!

示例

 public class MainActivity extends Activity {

// Use a unique request code for each use case
private static final int REQUEST_CODE_EXAMPLE = 0x9988;

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

// Create an Intent to start AnotherActivity
final Intent intent = new Intent(this, AnotherActivity.class);

// Start AnotherActivity with the request code
startActivityForResult(intent, REQUEST_CODE_EXAMPLE);
}

//-------- When a result is returned from another Activity onActivityResult is called.--------- //
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

// First we need to check if the requestCode matches the one we used.
if(requestCode == REQUEST_CODE_EXAMPLE) {

// The resultCode is set by the AnotherActivity
// By convention RESULT_OK means that what ever
// AnotherActivity did was successful
if(resultCode == Activity.RESULT_OK) {
// Get the result from the returned Intent
final String result = data.getStringExtra(AnotherActivity.EXTRA_DATA);

// Use the data - in this case, display it in a Toast.
Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show();
} else {
// AnotherActivity was not successful. No data to retrieve.
}
}
}
}

AnotherActivity <- 这是我们用来发送数据到MainActivity的那个

public class AnotherActivity extends Activity {

// Constant used to identify data sent between Activities.
public static final String EXTRA_DATA = "EXTRA_DATA";

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

final View button = findViewById(R.id.button);
// When this button is clicked we want to return a result
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Create a new Intent as container for the result
final Intent data = new Intent();

// Add the required data to be returned to the MainActivity
data.putExtra(EXTRA_DATA, "Some interesting data!");

// Set the resultCode to Activity.RESULT_OK to
// indicate a success and attach the Intent
// which contains our result data
setResult(Activity.RESULT_OK, data);

// With finish() we close the AnotherActivity to
// return to MainActivity
finish();
}
});
}

@Override
public void onBackPressed() {
// When the user hits the back button set the resultCode
// to Activity.RESULT_CANCELED to indicate a failure
setResult(Activity.RESULT_CANCELED);
super.onBackPressed();
}
}

注意:现在 checkin MainActivitystartActivityForResult在那里您指定 REQUEST_CODE 。假设您想调用三个不同的 Activity 来获取结果..所以有三个 startActivityForResult使用三个不同的 REQUEST_CODE 进行调用。 REQUEST_CODE 只是您在 Activity 中指定的唯一键,用于唯一标识您的 startActivityForResult来电。

一旦您从这些 Activity 收到数据,您就可以检查 REQUEST_CODE 是什么,然后您就知道啊哈这个结果来自此 Activity 。

这就像你给你的爱人发了一封带有彩色封面的邮件,并要求他们用同样的封面回复。然后,如果您收到他们的回信,您就知道是谁给您寄来的。哇哦;)

关于java - 我可以在 finish() 上传递额外的 Intent 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com