我有一个表格由用户和下一个按钮填充"下一个"在Activity1中。
当用户点击"下一步"按钮第二个活动Activity2已启动。
在Activity2中我有上一个按钮"上一个"。(*不是设备后退按钮)
所以当用户点击"以前"按钮,应使用表单中输入的详细信息打开Activity1。
不应刷新Activity1。
在stackoverflow上大量搜索但没有运气.. !!!
答案 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();