3.5 技巧:点击应用程序图标后跳转至应用程序首页
Android平板电脑开发秘籍
如果用户点击了ActionBar内的Logo或图标,将会跳转至应用程序首页。应用程序首页的意思是应用程序的主Activity,即Activity栈的根成员。
默认情况下,显示在ActionBar中的Logo或图标是不能被点击的。为了让Logo或图标能被点击,必须调用ActionBar的setHomeButtonEnabled()方法,并把Boolean值True传入,如下所示:
actionBar.setHomeButtonEnabled(true);
点击Logo或图标意味着点击了一个菜单项,将由Activity的事件处理方法(Handler)onOptionsItemSelected来处理。当点击Logo或图标时,将被视作点击了ID为android. ``R.id.home的菜单项。换句话说,当点击Logo或者图标时,将会调用onOptionItemSelected()方法,android.R.id.home将作为参数被传入。假设当前Activity是CreateActivity,点击图标后要跳转的主Activity或根Activity为ActionItemsAppActivity,代码清单3-3给出了代码。
代码清单3-3 写入Activity文件CreateActivity.java的代码
package com.androidtablet.actionitemsapp;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
public class CreateActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { #1
switch (item.getItemId()) {
case (android.R.id.home) :
Intent intent = new Intent(this,
ActionItemsAppActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
}
上述代码假定名为create.xml的Layout文件已存在于res/layout文件夹中。为了能跳转到主Activity,使用了一个名为FLAG_ACTIVITY_CLEAR_TOP的Intent标记,用以关闭所有在主Activity之后启动的Activity。在上述代码中可以看到,通过调用getActionBar()方法获得了ActionBar对象actionBar,Boolean值True被传入了setHomeButtonEnabled()方法,这使得应用程序的Logo可被点击了。点击应用程序的Logo,将会在ID为android.R.id.home的菜单项上生成一个点击事件。在事件处理方法onOptionsItemSelected()中,将检查ID为android.R.id.home的菜单项是否被点击了,也即应用程序的Logo是否被点击。如果是应用程序Logo被点击了,将会跳转至应用程序的主Activity ActionItemsAppActivity.class中,跳转操作是通过清除栈顶所有其他Activity(如果存在的话)来实现的。
在Android 4.1以上的版本中,上述代码中语句#1代表的onOptionsItemSelected方法可以整个去掉。也就是说,只要在AndroidManifest.xml文件中加入以下语句,就可以跳转至主Activity中了:
<activity android:name=".CreateActivity" android:label="@string/app_name"
android:parentActivityName="ActionItemsAppActivity"/>