activity需要重写的方法
来源:互联网 发布:千元机推荐2017知乎 编辑:程序博客网 时间:2024/04/29 07:27
onCreate, onStart, onResume, onPause, onStop, onRestart, onDestroy
如果连这7个方法都不清楚的话,那么就该从头开始看Android了。下图是Activity的生命周期,加深记忆用:onNewIntent
在AndroidManifest.xml将某activity的android: launchMode设置为singleTask或singleTop的情况下,当需要开启(startActivity)这个activity的时候,如果当前应用的Activity栈中已经存在了该activity,那么该activity将不会按照
onCreate → onStart → onResume
的顺序启动新的activity,而是会按照
onNewIntent → onResume
的顺序将Activity栈中已经存在的那个Activity实例调用到最前台。
调用startActivity方法时传递的intent参数会作为onNewIntent方法的参数被使用,而Activity类本身通过getIntent方法返回的intent变量则是初始的intent值,从onNewIntent方法无关,除非调用startActivity之前通过setIntent设置intent,以保持intent总是最新的intent。onSaveInstanceState与onRestoreInstanceState
当设备的配置(横竖屏、语言等)发生变化而使Activity自动重启,或者Activity从前台转到后台(如,按下Home键)的时候,Activity会调用onSaveInstanceState(Bundle)方法将当前Activity的状态保存到一个Bundle变量中。这个Bundle变量与onCreate(Bundle)方法和onRestoreInstanceState(Bundle)中的Bundle参数是同一个,也就是说,后两个方法通过传入的Bundle参数还原Activity的状态。
不过,虽然Activity的状态保存到了Bundle中,但是这些状态数据却无法从Bundle中取出。要想手动地设置一些重启后需要的状态数据,可以直接调用该Bundle实例的putXXX方法存入额外的数据信息。
如下列所示:
[java] view plain copy
public class SaveNRestoreInstanceStateActivity extends Activity {
/* Called when the activity is first created. /
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.save_restore_state);
}@Override
protected void onRestart() {
super.onRestart();
EditText et1 = (EditText) findViewById(R.id.et1);
EditText et2 = (EditText) findViewById(R.id.et2);et1.setText("This is et1"); et2.setText("This is et2");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString(“et1”, “This is from outState and this is et1”);
outState.putString(“et2”, “This is from outState and this is et2”);super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);EditText et1 = (EditText) findViewById(R.id.et1); EditText et2 = (EditText) findViewById(R.id.et2); et1.setText(savedInstanceState.getString("et1")); et2.setText(savedInstanceState.getString("et2"));
}
}
4. onCreateDialog与onPrepareDialog
虽然onCreateDialog、onPrepareDialog方法,以及相关的调用方法showDialog、dismissDialog、removeDialog在API Level 11以后遭到废弃,但是对于2.2(Level 8)、2.3.1(Level 9)和2.3.3(Level 10)中却仍然是必不可少的。
简单地说onCreateDialog和onPrepareDialog就与onCreate和onStart方法之间的关系类似,onCreateDialog负责在弹出框还不存在时生成弹出框Dialog,而onPrepareDialog则是在Dialog显示前对其进行进一步的处理。
这里需要特别注意的是:使用removeDialog方法后,弹出框会被清除,下一次在本Activity中使用showDialog首先会调用onCreateDialog,然后再调用onPrepareDialog;而如果只使用dismissDialog方法使弹出框不可见,弹出框并不会被清除,下次调用showDialog时也不会调用onCreateDialog。
5. onCreateContextMenu与onContextItemSelected
上下文菜单(ContextMenu)的实际效果是,长按某一个View控件之后弹出一个可选的菜单。ContextMenu相对真正的长按事件(OnLongClickListener)中弹出菜单的优点在于使用非常灵活,代码也相对集中。但是需要通过registerForContextMenu绑定View控件之后才能生效。
onCreateContextMenu方法的原型是:
void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
其中的ContextMenu menu就是最终会显示的上下文菜单,需要在控件上进行的UI操作都需要在menu上进行;View v是触发上下文菜单的View控件。
另一个方法onContextItemSelected,是用来处理上下文菜单中的选中事件的。其参数是MenuItem,也就是ContextMenu中的选中项,可以通过在onCreateContextMenu中设置的groupId、itemId、order或者title来加以区分。
6. onCreateOptionsMenu与onOptionsItemSelected
虽然Android 4.0之后要取消菜单键,但是现在菜单键仍然非常有用。onCreateOptionsMenu就是菜单键的处理方法。咋看之下,菜单键的处理和上下文菜单的处理方法的格式几乎是一致的,实际操作中也是如此,不再赘述。具体示例如下:
[java] view plain copy
public class OptionMenuTestActivity extends Activity {
private TextView text;
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu sub = menu.addSubMenu("0"); sub.add("0-1").setOnMenuItemClickListener(listener);; sub.add("0-2").setOnMenuItemClickListener(listener);; sub.add("0-3").setOnMenuItemClickListener(listener); menu.add("1").setIcon(R.drawable.icon); menu.add("2"); menu.add("4"); menu.add("5"); menu.add("6"); menu.add("7"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { text.setText(item.getTitle()); return true; } private OnMenuItemClickListener listener = new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { text.setText(item.getTitle()); return true; } };
}
需要注意的是,菜单键所弹出的功能菜单一般都有项数限制(一般为6项),而且不可手动修改,如果超过这个数目,那么后面的菜单项将会被折叠起来。
另外,无论是上下文菜单还是菜单键菜单,都支持嵌套子菜单SubMenu,如上例中所示。
7. onBackPressed
回退键的处理方法,一般用来屏蔽回退键或者在添加后退时的额外功能(弹出确认退出的对话框等)。
- activity需要重写的方法
- Activity中那些需要重写的方法
- Activity中那些需要重写的方法
- Activity中那些需要重写的方法
- Activity中需要重写的方法
- 重写UICollectoinViewFlowLayout需要重写的方法
- 重写equals方法一般需要重写hashCode方法的原因
- 重写toString方法需要注意的
- java--什么时候需要方法的重写
- 继承ViewGroup需要重写的方法
- 重写方法时需要注意的问题
- 继承baseadapter需要重写的方法
- 封装控件,需要重写的方法
- 自定义ViewGroup需要重写的方法
- 给Activity添加自己需要的方法
- android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法
- 重写equal()为什么需要重写hashCode方法
- 重写Servlet的doGet()方法需要注意的!
- Java笔记- 多线程-死锁
- 阅读过的文章列表
- 对Rockerstar Games这个公司GTA5这个游戏的看法
- 单片机中数码管蜂鸣器炸弹
- POJ 1651 Multiplication Puzzle (区间DP/矩阵链乘优化)
- activity需要重写的方法
- 《Java in Action》-1 第9章 默认方法
- Java虚拟机栈
- Json 数据处理时踩过得坑
- 第七周项目6——停车场模拟
- android 事件分发机制概述
- (HDU 1074)Doing Homework dp 状态压缩
- kafka安装
- Android 进程保活技术总结