在Android开发中,启动新的Activity并获取结果是一个常见的操作。而这个操作在很多情况下都是通过使用startActivityForResult()方法来实现的。本文将详细解释这个方法的工作原理,以及如何在你的应用中使用它。
我们先来简单了解一下startActivityForResult()方法的工作原理。当你在一个Activity中调用startActivityForResult()方法时,你会启动一个新的Activity,并且当前Activity会暂停并等待新Activity结束。当新Activity结束时,当前Activity会恢复,并且你可以通过重写onActivityResult()方法来获取新Activity返回的结果。
这个机制是有一定争议的。有些开发者认为,startActivityForResult()是一种过时的机制,应该被现代化的意图(Intent)所取代。然而,我认为这个机制仍然有其存在的价值。首先,它简化了在两个Activity之间传递数据的操作。其次,它提供了一种易于理解的流程控制方式。
那么,如何在你的应用中使用startActivityForResult()方法呢?下面是一个简单的示例:
```java public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, 0); // 0是请求码,用于在onActivityResult中识别来源 } }); }
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) { // 判断是否是启动的Activity返回的结果 if (resultCode == RESULT_OK) { // 判断被启动的Activity是否正常结束 // 获取返回的数据 String result = data.getStringExtra("result"); Log.d("MainActivity", "Result: " + result); } else if (resultCode == RESULT_CANCELED) { // 判断被启动的Activity是否被取消 // 处理被取消的情况 } } } } ``` 在这个示例中,我们启动了一个新的Activity,并且在新Activity结束时获取了它返回的结果。我们通过在Intent中添加一个字符串类型的额外数据来实现数据的传递。在onActivityResult()方法中,我们根据请求码和结果码来判断是否接收到新Activity返回的结果,并做出相应的处理。
需要注意的是,startActivityForResult()方法在使用时也有一些限制和注意事项。例如,如果启动的Activity由于异常原因结束,那么调用者Activity的onActivityResult()方法将不会被调用。此外,如果你启动了多个Activity,那么只有最后一个Activity的onActivityResult()方法会被调用。因此,在使用这个方法时,你需要仔细考虑这些限制和注意事项。
新起点 超级网址导航
