android - 在 android 中,如何恢复上一个 Activity ,点击第二个 Activity 的按钮

标签 android

我在 Activity1 中有一个要由用户填写的表单和下一个按钮“下一步”。

当用户单击“下一步”按钮时,第二个 Activity Activity2 将启动。

在 Activity2 中,我有上一个按钮“上一个”。(* 不是设备后退按钮)

因此,当用户单击“Previous”按钮时,应打开 Activity1,并在表单中输入详细信息。

Activity1 不应刷新。

在 stackoverflow 上搜索了很多但没有运气..!!!

最佳答案

为什么不使用 startActivityForResults 然后在启动的 Activity 中 finish()

在启动的 Activity 中,您可以在 onCreate 方法 getIntent(); 中访问您的 Intent ,然后您可以使用 setResult(Activity.RESULT_OK, result);setResult(Activity.RESULT_OK);(对于已取消的 Activity.RESULT_CANCELED)返回结果代码和数据,设置结果后调用 finish 和然后返回(如果我没记错的话,代码不会退出方法)。

然后在第一个 Activity 中你得到结果并处理如何处理它:

onActivityResult(int requestCode, int resultCode, Intent data)

另一种选择: 您还可以使用按下后退按钮的逻辑从您的代码调用方法:super.onBackPressed();

编辑

正如我所 promise 的,这是一个示例

两个 Activity - 第一个有两个 TextView 和一个启动第二个 Activity 的按钮 -> 在第二个 Activity 中有两个 EditText,你可以在其中输入一些数据当您按下上一个按钮时,它会返回到第一个 Activity 。如果您按下后退按钮而不是上一个按钮,您将进入取消的逻辑,该逻辑在示例中没有执行任何操作,只有一条评论。

主 Activity

TextView textViewFirstName;
TextView textViewFamilyName;

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

    textViewFirstName = (TextView)findViewById(R.id.first_name_edit_text);
    textViewFamilyName = (TextView)findViewById(R.id.family_name_edit_text);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    //requestCode here is 12345 that we passed when we started SecondActivity
    if(resultCode == Activity.RESULT_OK){
        String resultFirstName = data.getStringExtra("firstName");
        String resultFamilyName = data.getStringExtra("familyName");

        textViewFirstName.setText(resultFirstName);
        textViewFamilyName.setText(resultFamilyName);
    }
    if (resultCode == Activity.RESULT_CANCELED) {
        //Canceled logic
    }
}

public void nextButtonClick(View view) {
    Intent i = new Intent(view.getContext(), SecondActivity.class);

    //If you want you could pass some additional data, like which action to take
    //if you're reusing the second activity for more than one use case
    i.putExtra("someAdditionalData", "Some string that you want to pass");

    //12345 is int that you pass and will be returned as requestCode in onActivityResult
    startActivityForResult(i, 12345);
}

第二个 Activity

EditText editTextFirstName;
EditText editTextFamilyName;

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

    editTextFirstName = (EditText)findViewById(R.id.first_name_edit_text);
    editTextFamilyName = (EditText)findViewById(R.id.family_name_edit_text);

    Bundle bundle = getIntent().getExtras();
    String someAdditionalData = bundle.getString("someAdditionalData");
}

public void previousButtonClick(View view) {
    Intent returnIntent = new Intent();
    returnIntent.putExtra("firstName", editTextFirstName.getText().toString());
    returnIntent.putExtra("familyName", editTextFamilyName.getText().toString());
    setResult(RESULT_OK, returnIntent);
    finish();
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:text="Main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView
            android:hint="First name"
            android:id="@+id/first_name_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <TextView
            android:hint="Family name"
            android:id="@+id/family_name_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <Button
        android:onClick="nextButtonClick"
        android:text="Next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

second_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SecondActivity">
    <TextView
        android:text="Second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <EditText
            android:hint="First name"
            android:id="@+id/first_name_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <EditText
            android:hint="Family name"
            android:id="@+id/family_name_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <Button
        android:onClick="previousButtonClick"
        android:text="Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

关于android - 在 android 中,如何恢复上一个 Activity ,点击第二个 Activity 的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33458134/

相关文章:

java - 如何在 onbackpressed() 时刷新 fragment 中的 ListView

android - Azure -> Node.js 中的 Easy api -> 如何发送 Android 推送通知?

android - 在通知工作之前是否需要将 APK 上传到 Google Play?

android - 使用底部导航在flutter中的dart文件之间切换

android - 有人知道如何正确使用 onActivityReenter 吗?

java - 如何在没有操作的情况下取消选中复选框然后进行检查?

android - 错误 : Failed to resolve: androidx. 旧版:legacy-support-v4

android -/system/app在Android上的作用是什么?

Android Facebook SDK AppInviteDialog 回调不工作

android - 如何配置用于 "Exception handlers should provide some context and preserve the original exception"问题的记录器?