添加后退按钮到操作栏

时间:2012-08-22 10:03:29

标签: android android-layout android-actionbar

我一直在尝试向操作栏添加后退按钮。

我希望我的观点看起来像这样: enter image description here

我想在操作栏的左侧添加后退按钮。

我添加了此代码

ActionBar actionBar = getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

但它不起作用。

我该如何解决这个问题?

11 个答案:

答案 0 :(得分:127)

设定后 actionBar.setHomeButtonEnabled(true);

添加以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

答案 1 :(得分:54)

添加

actionBar.setHomeButtonEnabled(true);

然后添加以下

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

根据naXa的建议,我在itemId上添加了一项检查,以便在操作栏上有多个按钮时使其正常工作。

答案 2 :(得分:26)

这个对我有用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_your_activity);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // ... other stuff
}

@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

当您使用SupportActionBar中的后退按钮时,将调用onSupportNavigateUp()方法。

答案 3 :(得分:24)

设置

 actionBar.setHomeButtonEnabled(true);

您必须在AndroidManifest.xml中配置父活动

<activity
    android:name="com.example.MainActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat" />
<activity
    android:name="com.example.SecondActivity"
    android:theme="@style/Theme.AppCompat" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.MainActivity" />
</activity>

点击此处了解更多信息http://developer.android.com/training/implementing-navigation/ancestral.html

答案 4 :(得分:10)

有两种方法可以解决这个问题。

选项1:更新Android清单 如果始终从同一活动调用设置Activity,则可以在Android Manifest中建立关系。 Android会自动显示&#39;返回&#39; ActionBar中的按钮

<activity
    android:name=".SettingsActivity"
    android:label="Setting Activity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.example.MainActivity" />
</activity>

选项2:更改ActionBar的设置 如果您不知道哪个活动将调用“设置活动”,您可以像这样创建它。在您的活动中首先扩展ActionBarActivity(确保您的@imports与您正在寻找的兼容性级别相匹配)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings_test);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);
}

然后,检测后退按钮&#39;按并告诉Android关闭当前打开的活动。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

应该这样做!

答案 5 :(得分:6)

您需要在menuItem.getItemId()方法中检查android.R.id.home onOptionsItemSelected

重复Android Sherlock ActionBar Up button

答案 6 :(得分:6)

首先使用:

ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);

然后在onOptionsItemSelected方法

中设置按钮单击操作
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
         finish();
        return true;
     default:
        return super.onOptionsItemSelected(item);
  }
 }

答案 7 :(得分:6)

更简单,更好: 对于API&gt; = 16

只需为Manifest中的每个活动添加“parentActivityName”。后退按钮将自动将您带到父活动。

"questionID": ["5669d90a058ceddc158e97e2", "4668d80b158ceggc158e97f2"]

答案 8 :(得分:6)

使用此按钮显示后退按钮并移至上一个活动,

final ActionBar actionBar = getSupportActionBar();
        assert actionBar != null;
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.back_dark);


@Override
    public boolean onOptionsItemSelected(final MenuItem item) {

        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

答案 9 :(得分:5)

如果其他人需要解决方案

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}

答案 10 :(得分:1)

在onCreate()方法

中添加此行
cmake_minimum_required(VERSION 3.7)
project(XXX) 
find_package(Boost 1.58.0 REQUIRED COMPONENTS system filesystem program_options chrono timer date_time REQUIRED)
if(NOT Boost_FOUND)
    message(FATAL_ERROR "NOTICE: This demo requires Boost and will not be compiled.")
endif()
set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

file(GLOB lib_SRC RELATIVE "lib/" "*.h" "*.cpp")
file(GLOB test_SRC RELATIVE "tests/" "*.h" "*.cpp")

# need to fix the instruction below to reference library
set(SOURCE_FILES ${lib_SRC} tests/testComplexCreator.cpp tests/testDataFormatter.cpp tests/testComplexAnalysis.cpp tests/testFascadeClass.cpp)
add_library(libXXX SHARED ${SOURCE_FILES})    
add_executable(${PROJECT_NAME} main.cpp random_mat_vector_generator.h random_mat_vector_generator.cpp)
add_executable(gd_validator gudhi_validator.cpp)
TARGET_LINK_LIBRARIES( gd_validator ${Boost_LIBRARIES} )

然后覆盖此方法

getSupportActionBar().setDisplayHomeAsUpEnabled(true);