2

假设我有两个活动 -MainActivityNameActivity. MainActivity打开NameActivity以从用户那里获得一些输入,方法是调用startActivityForResult(...).

NameActivity中,我已经覆盖了该finish方法,因此按返回将返回名称:

@Override
public void finish() {
    String name = nameEditText.getText().toString();
    Intent intent = new Intent();
    intent.putExtra(RESULT_NAME, name);
    this.setResult(RESULT_OK, intent);

    super.finish();
}

在 MainActivity 中,我按如下方式处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case REQUEST_CODE_GET_NAME:
            if (resultCode == RESULT_OK) {
                String name = data.getStringExtra(SelectionActivity.RESULT_NAME);
                Toast.makeText(this, "Hi " + name + "!", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            break;
    }
}

使用操作栏中的向上按钮时,有没有办法NameActivity做同样的事情?

注意:我的应用程序面向 Android 4.0 (ICS) 及更高版本,因此向上导航是“自动”发生的——也就是说,我没有编写任何代码,只是在我的 Manifest 中指定了父活动,如下所示:

<activity
    android:name="com.example.subactivitytest.NameActivity"
    android:label="@string/title_activity_name"
    android:parentActivityName="com.example.subactivitytest.MainActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.subactivitytest.MainActivity" />
</activity>

谢谢!

4

2 回答 2

2

你总是可以在你的方法中调用你的完成onOptionsItemSelected()方法:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
            case android.R.id.home:
                    finish();
                    return true;
          }

另外,请确保您已启用主页按钮: getActionBar().setHomeButtonEnabled(true);

于 2014-01-21T15:22:10.297 回答
0

将您的代码移动到 onPause() 以确保它始终被存储。但我不知道为什么你的方法不起作用——我认为向上按钮确实完成了活动。

于 2014-01-21T15:16:29.223 回答