Android-Activity(一)
Activity间数据传递
1. 向上一个Activity传递数据
假设有两个Activity,分别为Activity1, Activity2,由Activity1的Button Bstart启动Activity2,则代码如下:
Activity1:
Bstart.OnClickListener( v -> {
Intent int = new Intent(Activity1.this, Activity2.class);
startActivityForResult(int, INTENT_ID_1);
});
Activity2:
Bresult.OnClickListener( v -> {
Intent int = new Intent();
int.putExtra("data_return", "....");
setResult(RESULT_OK, intent);
finish();
});
Activity1:
@Override
protected void onActivityResult(int request, int resultCode, Intent int) {
switch(request)
{
case INTENT_ID_1:
if(resultCode == RESULT_OK) {
String data = int.getStringExtra("data_return");
...
}
break;
}
}
但此时,存在的问题是:点击back键则无法将结果返回
此时,需要重写Activity2中的onBackPressed()方法:
@Override
protected void onBackPressed() {
...
Intent int = new Intent();
int.putExtra("data_return", "....");
setResult(RESULT_OK, intent);
finish();
}
即可解决问题
2.利用Bundle传递数据
Bundle data = new Bundle();
data.putString();
data.putInt();
data.put....
Intent intent = new Intent(....);
Intent.putExtra("data1", data);
startActivity(intent);
Activity四种状态
1.运行
此时该Activity位于返回栈栈顶
2.暂停
非栈顶,但可见
3.停止
非栈顶,不可见,但会保留相应状态及成员变量(不可靠),当内存不足时,会被回收
4.销毁
从返回栈中移除时,则为销毁状态
当被销毁时,临时数据的保存方法
此时是这样一个情形:点击Activity1中的按键进入Activity2,再返回,则Acivity1会重新创建,则Activity1的数据会丢失。
此时采用调用onSaveInstanceState(Bundle b),并重写onCreate(Bundle b)方法来解决。
@Override
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(sate);
state.putString("", "");
....
}
@Override
protected void onCreate(Bundle b) {
...
if(b != null) {
String data = b.getString("..");
...
}
}