在android中,如何恢复上一个活动,在按钮上单击第二个活动

在android中,如何恢复上一个活动,在按钮上单击第二个活动,android,Android,我有一张表格要由用户填写,并在Activity1中按下“下一步”按钮 当用户单击“下一步”按钮时,第二个活动2开始 在Activity2中,我有previous按钮“previous”。(*不是设备后退按钮) 因此,当用户单击“上一步”按钮时,Activity1应打开,并在表单中输入详细信息 不应刷新Activity1 在stackoverflow上搜索了很多,但没有运气 为什么不先使用startActivityForResults然后在启动的活动finish() 在已启动的活动中,您可以通过o

我有一张表格要由用户填写,并在Activity1中按下“下一步”按钮

当用户单击“下一步”按钮时,第二个活动2开始

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

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

不应刷新Activity1


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

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

在已启动的活动中,您可以通过onCreate方法
getIntent()访问您的意图然后可以使用
setResult(Activity.RESULT\u OK,RESULT)
设置结果(Activity.RESULT\u OK)
(用于取消的
活动。RESULT\u cancelled
)返回结果代码和数据,设置结果后调用finish,然后返回(如果我记得正确,代码不会退出方法)

然后,在第一个活动中,您将获得结果并在中处理如何处理它:

onActivityResult(int requestCode, int resultCode, Intent data)
另一个选项: 您还可以使用按下后退按钮的逻辑从代码中调用方法:
super.onBackPressed()

编辑

正如我所承诺的,这里有一个示例

两个活动-第一个活动有两个
TextView
s和一个按钮,下一个按钮启动第二个活动->第二个活动中的
EditText
s,您可以在其中输入一些数据,然后在按下“上一步”按钮时返回到第一个活动。如果按“后退”按钮而不是“上一步”按钮,则输入取消的逻辑,该逻辑在示例中没有任何作用,只有一条注释

main活动

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);
}
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();
}
第二活动

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);
}
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();
}
活动\u 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>
<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>

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=".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>
<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>

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

在已启动的活动中,您可以通过onCreate方法
getIntent()访问您的意图然后可以使用
setResult(Activity.RESULT\u OK,RESULT)
设置结果(Activity.RESULT\u OK)
(用于取消的
活动。RESULT\u cancelled
)返回结果代码和数据,设置结果后调用finish,然后返回(如果我记得正确,代码不会退出方法)

然后,在第一个活动中,您将获得结果并在中处理如何处理它:

onActivityResult(int requestCode, int resultCode, Intent data)
另一个选项: 您还可以使用按下后退按钮的逻辑从代码中调用方法:
super.onBackPressed()

编辑

正如我所承诺的,这里有一个示例

两个活动-第一个活动有两个
TextView
s和一个按钮,下一个按钮启动第二个活动->第二个活动中的
EditText
s,您可以在其中输入一些数据,然后在按下“上一步”按钮时返回到第一个活动。如果按“后退”按钮而不是“上一步”按钮,则输入取消的逻辑,该逻辑在示例中没有任何作用,只有一条注释

main活动

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);
}
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();
}
第二活动

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);
}
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();
}
活动\u 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>
<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>

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=".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>
<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>

在previousButton上单击Listener,您可以调用finish();
这将关闭当前活动并从堆栈中重新加载上一个活动。这是一个快速破解

在上一个按钮onClickListener上,您可以调用finish();
这将关闭当前活动并从堆栈中重新加载上一个活动。这是一个快速破解

尝试在第二个活动中重写
onBackPressed
方法,并在上一个按钮的click事件中调用它

内部活动2

@Override
public void onBackPressed()
{
     super.onBackPressed();  
}
并在上一个按钮单击事件时调用此

buttonPrevious.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }

        });

尝试在第二个活动中重写
onBackPressed
方法,并在单击上一个按钮的事件时调用它

内部活动2

@Override
public void onBackPressed()
{
     super.onBackPressed();  
}
并在上一个按钮单击事件时调用此

buttonPrevious.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }

        });

我会避免使用finish();因为它从它被调用的地方杀死了活动。尝试使用:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

而不是完成()

我会避免使用finish();因为它从它被调用的地方杀死了活动。尝试使用:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

而不是完成()

你能提供一个你的代码不起作用的例子吗?请查看帮助中心,了解如何提问-能否提供一个代码不起作用的示例?请查看帮助中心,了解如何提问-谢谢,但是一段示例代码会很有用,因为我是android新手。我已经描述了所需的所有步骤,我想,我自己也不是android高手,但通过几次搜索就可以获得所有这些。如果你还有困难,我明天醒来时给你举个例子;)@RiteshKarmare我已经用我承诺的例子编辑了我的答案;)谢谢,但是一段示例代码会很有用,因为我是android新手。我已经描述了所有需要的步骤,我想,我自己也不是android高手,但通过几次搜索就可以获得所有这些。如果你还有困难,我明天醒来时给你举个例子;)@RiteshKarmare我已经用我承诺的例子编辑了我的答案;)@RiteshKarmare如果这解决了您的问题,请选择答案。@RiteshKarmare如果这解决了您的问题,请选择答案。