我看到了插入符号,但是当我单击它时没有任何反应。我在哪里告诉它到家并设置哪个活动是家?
3 回答
你需要这条线:
getActionBar().setDisplayHomeAsUpEnabled(true);
把它放进去onCreate()
;
这将使它可点击。您将需要处理单击事件。这是通过覆盖完成的onOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
default:
return super.onOptionsItemSelected(item);
}
}
如果你想使用 NavUtils,(我已经看到 ADT 插件在制作活动时使用了它)你可以像这样替换更改实现:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
不要忘记
import android.support.v4.app.NavUtils;
此外,您可以将其添加到您的活动节点:
<activity
android:name=".SomeActivity"
android:label="@string/activity_label" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.mypackage.MainActivity" />
</activity>
NavUtils 通常是更好的方法。有关详细信息,请参阅官方 Android指南。
在你的onCreate
你有:
getActionBar().setDisplayHomeAsUpEnabled(true);
然后使用:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
更新以解决下面的评论,正确地指出我的原始答案并不适用于所有情况。“home/up”按钮应该分别带您进入 Home Activity 或 Parent Activity。从ActionBar
文件来看——
默认情况下,您的应用程序图标出现在左侧的操作栏中。如果您愿意,您可以启用该图标以充当操作项。为了响应用户对图标的操作,您的应用程序应该执行以下两项操作之一:
Go to the application "home" activity, or Navigate "up" the application's structural hierarchy
实现“家”很简单。启动应用程序的主活动(通常是您的主启动活动)的意图,如果存在则清除现有实例的后台堆栈-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
"up" 是类似的,除了你应该使用
getActionBar().setDisplayHomeAsUpEnabled(true);
在您onCreate
让图标显示为“up”而不是“home”,并启动父活动的实例。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(parentActivityIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
在这两种情况下,对于可以从应用程序外部启动的活动,您应该添加FLAG_ACTIVITY_NEW_TASK
以启动新任务而不是调用者任务。
Activity
如果您可以从另一个应用程序启动,并且想要为您的应用程序构建一个返回堆栈以返回根目录,那么“向上”可能会变得更加复杂。有关更多信息,请参阅本指南。
如下所示,我的原始答案在指南中被认为是错误的形式,因为它将主页/向上按钮视为“返回”。它将带您到调用此活动的活动,不一定是家庭或父母。对于具有严格的活动树层次结构的应用程序,它可以很好地“向上”运行,因为给定的活动总是由其父项启动。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}