问题提出:从列表页进到详细信息页并修改数据后返回到上一个活动的时候刷新列表页的数据。
思考过程:返回上一个活动页只需要按一下back键就可以,并没有一个用于启动活动的Intent来传递数据,于是查阅文档发现Activity中海油一个startActivityForResult()方法也是用于启动活动的,这个方法就是期望在活动销毁的时候能够返回一个结果给上一个活动,这就符合了我们的问题要求。
startActivityForResult()需要接收两个参数,第一个还是Intent(传递数据),第二个就是请求码(在回调中判断数据的来源)
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
MyLogUtils.i(Const.LOG_TAG,"新增-设备属性纠正");
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
}
});
这里我们使用startActivityForResult()方法来启动SecondActivity,后面的1是请求码,唯一即可,接下来解释在SecondActivity中注册点击事件,并在点击事件中添加返回的数据逻辑。代码如下:
public class SecondActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Botton btn = findViewByid(R.id.back_Btn);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return","Hello SecondActivity");
setResult(RESULT_OK,intent);
finish();
}
});
}
}
在代码中看到我们还是使用了Intent传递数据,但是它没有指定任何的“意图”。把数据放到intent里面以后就调用setResult()方法,这个方法是专门用于传递数据给上一个Activity的,第一个参是用于向上一个Activity中返回处理结果,一般用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则把数据传递回去,然后在finish()销毁当前活动
由于在启动SecondActivity中使用了startActivityForResult(),在销毁之后还会回调FirstActivity中的OnActivityResult()方法,因此我们西药在FirstActivity中重写这个方法得到返回的数据,代码如下:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnData = data.getStringExtra("data_return");
Log.d("FirstActivity,"returnData");
}
break;
default:
}
}
这样就可以将数据传回给上一个Activity了
解决方案2:
利用安卓Activity中的生命周期的执行顺序也能简单的解决这个问题,知道了生命周期的执行顺序,就可以通过重写相应的方法,在方法中重新回去数据,然后刷新页面就可以实现(此方案更高级)
例如重写onResume(),代码如下:
@Override
protected void onResume() {
super.onResume();
//重新获取数据的逻辑,此处根据自己的要求回去
//显示信息的界面
setContentView(R.layout.first_layout);
initView();
}
onResume是在启动activity启动之后才能执行的,也就是恢复执行。程序正常启动:onCreate()->onStart()->onResume();
正常退出:onPause()->onStop()->onDestory()
一个Activity启动另一个Activity: onPause()->onStop(), 再返回:onRestart()->onStart()->onResume()
程序按back 退出: onPause()->onStop()->onDestory(),再进入:onCreate()->onStart()->onResume();
程序按home 退出: onPause()->onStop(),再进入:onRestart()->onStart()->onResume();