Android home/up 按钮
2016-07-25 23:39
288 查看
可能看了标题也不知道我说的是什么?
是!这个!
![](http://img.blog.csdn.net/20160725164507542)
这个按钮 官方称为 up navigation
如何指明呢?
注意:目前androidStudio自动生成的Activity 是 继承 AppCompatActivit 的
而 APPCompatActivity 是 android.support.v7.app 里的
所以:
使用这个方法添加的up键,要在哪里监听呢?
答案是:onOptionsItemSelected()
代码如下:
可以看到,这里使用了 NavUtils 类的一个 静态方法 navigateUpFromSameTask
这个静态方法的作用就是 调用时,结束当前的Activity,并且开始对应的父Activity
注意,对应两种不同的 parent Activity 的 launch mode ,也有两种不同的打开方式:
模式为 singTop 或者 是 intent 包含 FLAG_ACTIVITY_CLEAR_TOP , 那么parent activity 就会提到stack前面,并且 从 onNewIntent() 方法中可以获取 inten
模式为 standard 或者 是 intent 没有包含上面的flag的,parent Activity会先从栈中pop掉,然后在栈顶用一个新的实例来获取intent
特别要注意的是:如果要使用 navigateUpFromSameTask 如这个方法的名字,首先一定要是同一个task,也就是说,目前的这个task一定要是从你的app中打开的。如果是从其他的app中打开这个Activity,那么Up应该创建一个新的,属于你的app的task, 也就是要求新建一个 new back stack
如果你的这个Activity,是允许别的应用打开的。那么应该实现 onOptionsItemSelected() 方法,使得当点击navigate up的时候,你的app可以创建一个新的 task (对应一个back stack)
是!这个!
这个按钮 官方称为 up navigation
指明父activity
向上回溯的操作首先你得有一个“上”,这个上,就是指明的 父activity。也就是不管你是从什么地方打开的,你得 回溯动作一定是返回到你的父activity如何指明呢?
<activity android:name=".ChildActivity" ... android:parentActivityName=".ParentActivity" > <!--如果要支持android4.0以下的--> <meta-data android:name = "android.support.PARENT_ACTIVITY" android:value = ".ParenetActivty" /> </activity>
添加upAction
使用 setDisplayHomeEnabled() 方法,给actionbar添加一个up按钮:注意:目前androidStudio自动生成的Activity 是 继承 AppCompatActivit 的
而 APPCompatActivity 是 android.support.v7.app 里的
所以:
@Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); // 这个是一般支持的,使用会报错 getSupportActionBar.setDisplayHomeAsEnabled(true); // 这个是v7支持的,在目前可以使用 }
使用这个方法添加的up键,要在哪里监听呢?
答案是:onOptionsItemSelected()
代码如下:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 对于up按钮的响应如下 case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); }
可以看到,这里使用了 NavUtils 类的一个 静态方法 navigateUpFromSameTask
这个静态方法的作用就是 调用时,结束当前的Activity,并且开始对应的父Activity
注意,对应两种不同的 parent Activity 的 launch mode ,也有两种不同的打开方式:
模式为 singTop 或者 是 intent 包含 FLAG_ACTIVITY_CLEAR_TOP , 那么parent activity 就会提到stack前面,并且 从 onNewIntent() 方法中可以获取 inten
模式为 standard 或者 是 intent 没有包含上面的flag的,parent Activity会先从栈中pop掉,然后在栈顶用一个新的实例来获取intent
特别要注意的是:如果要使用 navigateUpFromSameTask 如这个方法的名字,首先一定要是同一个task,也就是说,目前的这个task一定要是从你的app中打开的。如果是从其他的app中打开这个Activity,那么Up应该创建一个新的,属于你的app的task, 也就是要求新建一个 new back stack
回退到新的 回退栈 navigate up with a new back stack
解决在不同app打开Activity问题如果你的这个Activity,是允许别的应用打开的。那么应该实现 onOptionsItemSelected() 方法,使得当点击navigate up的时候,你的app可以创建一个新的 task (对应一个back stack)
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: Intent upIntent = NavUtils.getParentActivityIntent(this); // 获取当前Activity的parent Activity if (NavUtils.shouldUpRecreateTask(this, upIntent)) { // 判断parentActivity在不在当前的task中,如果不在,那么说明是从别的app打开的当前app // 所以就用 TaskStackBuilder 来创建一个新的task TaskStackBuilder.create(this) // 添加这个Activity所有的parent到这个task中 .addNextIntentWithParentStack(upIntent) // 跳转到最近的parent .startActivities(); } else { // 如果在,说明是同一个app打开的,那么跳转到它的逻辑父Activity就好了 NavUtils.navigateUpTo(this, upIntent); } return true; } return super.onOptionsItemSelected(item);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories