转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
前言 上篇我们讲了一个Activity跳转到另外一个Activity如何传递参数,现在我们要讲如果在关闭了第二个Activiy的时候将参数返回给第一个Activity。以及非常重要的Activity生命周期,还有就是实战中经常遇到的开发问题解决方案。
Activity间传递数据打开一个activity关闭之后,返回数据 Activity1:
public void open(View v){ Intent intent = newIntent(this,OtherActivity.class); //requestCode :请求码(区分请求的来源) startActivityForResult(intent, 100); } protected void onActivityResult(intrequestCode, int resultCode, Intent data) { //TODO Auto-generated method stub super.onActivityResult(requestCode,resultCode, data); if(requestCode== 100 && resultCode == 200 && data != null){ String info =data.getStringExtra("info"); et_info.setText(info); }
Activity2:
public void close(View v){ String info =et_info.getText().toString(); Intent data = new Intent(); data.putExtra("info", info); //resultCode 结果码(区分返回的结果) setResult(200, data); //关闭Activity finish(); }
Activity生命周期 1 完整生命周期 onCreate() --> onStart() --> onResume() 可以在手机上看见activity ---> onPause() --> onStop() 看不见了 ---> onDestory() 销毁了
2 前台生命周期 onstart() ---> onStop()之间进行切换 onCreate() --> onStart() --> onResume() 现在有一个activity完全覆盖 onPause() ----> onStop() 如果上面的activity关闭 onRestart() ---> onStart() --> onResume()
3 可视生命周期 onResume() ---> onPause()之间进行切换 onCreate() --> onStart() --> onResume() 现在有一个activity没有完全覆盖 onPause() 如果上面的activity关闭 onResume() 临时数据 临时数据:应用程序出现异常。我们需要保存的数据。
//保存临时数据 @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putInt("page", 88); } //用来恢复数据 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); int page = savedInstanceState.getInt("page"); Log.i("i","page:"+page); } 横竖屏问题 ctrl+ F12 可以让模拟器横竖屏切换 竖屏---》横屏 先杀死一个Activity,再创建一个Activity 横屏---》竖屏 先杀死一个Activity,再创建一个Activity, 再杀死一个Activity,再创建一个Activity 原因:android的键盘导致 如果要变成一样:
<activity android:label="@string/app_name" android:name=".MainActivity" android:configChanges="keyboardHidden"> 此时会创建一个Activity实例 我不想创建。
<activity android:label="@string/app_name" android:name=".MainActivity" android:configChanges="keyboardHidden|orientation"> 此时不会创建实例 我想横屏和竖屏显示不一样。
//当切屏幕的时候触发 public voidonConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); int orientation = newConfig.orientation; //竖屏 if(orientation ==Configuration.ORIENTATION_PORTRAIT){ setContentView(R.layout.main);// 切换视图 }else{ setContentView(R.layout.other); } }
事件 //触摸事件 onTouchEvent()
//键盘按下 onKeyDown()
//键盘弹起 onKeyUp()
//键盘长按 onKeyLongPresss()
//键盘重复点击 onKeyMultiple()
必须知道的问题~!(面试经常问到) activity返回时,如何返回数据? Activity1: 1.startActivityForResult(intent) // 请求 3.onActivityResult() // 回调拿到反馈数据 Activity2: 2.setResult()//反馈 activity生命周期有哪些状态,有哪些方法? onCreate(); onStart();------------- onResume(); onPause(); onStop(); ---------onReStart(); onDestroy(); 异常情况下保存临时数据的方法? onSaveInstanceState(); // 保存数据 onRestoreInstanceState(); // 读取数据 常用事件有哪些? onKeyUp(); onKeyDown(); onKeyLongPress(); onKeyMultiple(); onTouchEvent(); |