Android 学习笔记之 Actionbar作为回到上一级

首先,给Actionbar添加返回图标:

代码:


 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);

isSendMsg = (Switch) findViewById(R.id.isSendMessage);
isCall = (Switch) findViewById(R.id.isCall);

data = (initDataApp)getApplication();

isSendMsg.setChecked(data.isSendMsg());
isCall.setChecked(data.isCall());
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
//actionBar.setListNavigationCallbacks(adapter, callback);

}

设置可用

重写onOptionsItemSelected方法:


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//NavUtils.navigateUpFromSameTask(this);//onSaveInstanceState

// This is called when the Home (Up) button is pressed
// in the Action Bar.

Intent parentActivityIntent = new Intent(this, MainActivity.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);

finish();

// onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}

这个方法可以实现在调用向上返回时的处理。

接收:android.R.id.home

处理这个android.R.id.home有几种方式,先对其进行对比:


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);//onSaveInstanceState
return true;
}
return super.onOptionsItemSelected(item);
}

测试回退的时候,到上一个Activity时出现丢失数据现象。(测试方式,在A中加一个EditText,然后输入数据,点击跳入Bactivity
,此时使用向上一级导航会出现丢失数据)


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentActivityIntent = new Intent(this, MainActivity.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}

使用intent方式一样,丢失数据。

后来我看了看源码,发现点击手机的回退键时,触发onBackPressed();方法,这个方法是返回时间轴上的上一个Activity,可以保存数据。


 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}

但是在测试的时候发现,这个方法只返还上一,而不是逻辑指定的,例:A->B->C,从C返回到A,如果使用onBackPressed(),则回到B,所以不对。到此我们只能使用NavUtils.navigateUpFromSameTask(this);//onSaveInstanceState,但是要实时保存数据。

下一篇我们将对保存数据进行处理,进行现场保护!

时间: 2024-08-10 00:05:06

Android 学习笔记之 Actionbar作为回到上一级的相关文章

Android学习笔记进阶之在图片上涂鸦(能清屏)

Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java [java] view plaincopy package xiaosi.handWriting; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import andro

Android学习笔记:ActionBar使用介绍

一.基本概念 最权威和官方的介绍请看google的api文档 http://developer.android.com/training/basics/actionbar/setting-up.html http://developer.android.com/guide/topics/ui/actionbar.html ActionBar故名思意,操作栏的含义,一般位于activity的顶部,可以放置文本标签,搜索框.按钮.图标等.是 Android3才支持的. 在eclipse创建一个默认的

Android学习笔记之 ActionBar

1,ActionBar的几种形式 2,使用ActionBar需要Activity开启了带ActionBar的主题 Theme.Holo

Pro Android学习笔记 ActionBar(1):Home图标区

 Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ? 综合 ? 共 3256字 ? 字号 小 中 大 ? 评论关闭 ActionBar在Android 3.0 SDK中为平板引入,在4.0中也可以在phone中使用.在title中提供类似tab和菜单的效果,有三种形式:Tabbed action bar,list action bar和standard action bar,我们将在小例子中进行示范. Home Icon 在Actio

【转】 Pro Android学习笔记(五一):ActionBar(4):标准和Tab模式

之前,我们学习的Action Bar是标准模式,Tab模式的如下图所示. 对于Tab,我们在Android学习笔记(二二): 多页显示-Tag的使用中学习过,但Action Bar的tab更适合fragment的使用.我们在之前实现的标准Action Bar的基础上添加导航用的tab,代码如下: public class TabbedActionBarDemo extends SearchTestCase3 implements ActionBar.TabListener{    @Overri

Pro Android学习笔记(十):了解Intent(上)

Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBaiscViewActivity.在AndroidManife

Pro Android学习笔记(三):了解Android资源(上)

在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源resource(上).XML解析(XmlPullParser),Android学习笔记(三九):资源resource(下). Strings资源.位于res/values下,可以有一个或多个xml文件.其中最为常见的是strings.xml,对于demo这类小例子,为了方便常全部都放在strings.x

【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和theme有关,如果theme设置不正确,还可能会出现异常. 相关的代码如下: public class ListActionBarDemo extends SearchTestCase3 implements OnNavigationListener{ //List触发的回调函数接口    @Ov

【转】Pro Android学习笔记(七):了解Content Provider(下上)

我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,author,created_date和modified_date几列.我们通过一个名为BookProvider的内容提供者将数据源运行封装,并对外提供增删改查的接口. 首先:定义Content Provider的结构 创建一个Provider,我们首先需要定义好这个provider的结构.通过consta