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

时间:2014-05-12 01:38:48   收藏:0   阅读:379

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

bubuko.com,布布扣
代码:
bubuko.com,布布扣
 @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);
 
 }
bubuko.com,布布扣

设置可用

重写onOptionsItemSelected方法:
bubuko.com,布布扣
@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);
 }
bubuko.com,布布扣

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

接收:android.R.id.home
处理这个android.R.id.home有几种方式,先对其进行对比:
 
bubuko.com,布布扣
@Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case android.R.id.home:
   NavUtils.navigateUpFromSameTask(this);//onSaveInstanceState
   return true;
  }
  return super.onOptionsItemSelected(item);
 }
bubuko.com,布布扣

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

bubuko.com,布布扣
@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);
 }
bubuko.com,布布扣

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

后来我看了看源码,发现点击手机的回退键时,触发onBackPressed();方法,这个方法是返回时间轴上的上一个Activity,可以保存数据。
bubuko.com,布布扣
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case android.R.id.home:
   onBackPressed();
   return true;
  }
  return super.onOptionsItemSelected(item);
 }
bubuko.com,布布扣

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

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

Android 学习笔记之 Actionbar作为回到上一级,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!