从A页面使用startActivityForResult()跳转到B页面,B页面点击返回时将新写入的值传回到A页面。
MainActivity:
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
});
textView = (TextView) findViewById(R.id.textview);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//此处可以根据两个Code进行判断,本页面和结果页面跳过来的值
if (requestCode == 1 && resultCode == 3) {
String result = data.getStringExtra("result");
textView.setText(result);
}
}
}
SecondActivity:
public class SecondActivity extends Activity {
EditText text1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
text1 = (EditText) findViewById(R.id.text1);
Button finish = (Button) findViewById(R.id.finish);
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent();
i.putExtra("result", text1.getText().toString());
setResult(3, i);
finish();
}
});
}
/**
* 不起作用
*/
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i = new Intent();
i.putExtra("result", text1.getText().toString());
setResult(3, i);
finish();
}
/**
* 需要拦截press的事件
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent i = new Intent();
Bundle bundle = new Bundle();
bundle.putString("result", text1.getText().toString());
setResult(3, i.putExtras(bundle));
// Intent i = new Intent();
// i.putExtra("result", text1.getText().toString());
// setResult(3, i);
finish();
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
}
注意:
1. 在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
2.另外在运行过程中,发现按Back键后,是直接返回RESULT_CANCELED的,而且不带有数据的。如果你设想在按返回键时返回数据,那么需要截获Back键的事件处理。
项目完整地址在这里:
https://github.com/buder-cp/base_component_learn