在android中,如何恢复以前的活动,点击第二个活动的按钮

时间:2015-11-01 00:45:31

标签: android

我有一个表格由用户和下一个按钮填充"下一个"在Activity1中。

当用户点击"下一步"按钮第二个活动Activity2已启动。

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

所以当用户点击"以前"按钮,应使用表单中输入的详细信息打开Activity1。

不应刷新Activity1。

在stackoverflow上大量搜索但没有运气.. !!!

4 个答案:

答案 0 :(得分:3)

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

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

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

onActivityResult(int requestCode, int resultCode, Intent data)

另一个选项: 您也可以使用后退按钮的逻辑调用代码中的方法:super.onBackPressed();

修改

正如我在此承诺的那样,示例

两个活动 - 第一个活动有两个TextView,另一个按钮启动第二个活动 - >在第二个活动中,两个EditText在其中输入一些数据,然后在按下上一个按钮时返回到第一个活动。如果按后退按钮而不是上一个按钮,则输入已取消的逻辑,该逻辑在示例中没有执行任何操作,只有注释。

<强> MainActivity

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);
}

<强> SecondActivity

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>

答案 1 :(得分:1)

在previousButton onClickListener上,你可以调用finish(); 这将关闭当前活动并从堆栈重新加载前一个活动。这是一个快速的黑客攻击。

答案 2 :(得分:0)

尝试在第二个活动中覆盖onBackPressed方法,并在上一个按钮的点击事件中调用它

内部活动2

@Override
public void onBackPressed()
{
     super.onBackPressed();  
}

并在之前的按钮点击事件

上调用此功能
buttonPrevious.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }

        });

答案 3 :(得分:0)

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

 input{    
background: url("http://kodyrabatowe.wp.pl/img/ico/search_gr.png") top left     no-repeat;
height:30px;
padding-left:25px;   
}
//////////////////////////
<!-- html code -->
<input type="text" name="txtBox" >

而不是finish();