我一直在尝试向操作栏添加后退按钮。
我希望我的观点看起来像这样:
我想在操作栏的左侧添加后退按钮。
我添加了此代码
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
但它不起作用。
我该如何解决这个问题?
答案 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
答案 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);