Активность не возвращается к предыдущей активности при нажатии кнопки навигации назад на панели действий.
Моя активность расширяет ActionBarActivity, и мы устанавливаем кнопку обратной навигации в onCreate():
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(getSupportActionBar()!=null)
{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
и для обратной печати завершение этого действия выполняется по заданному переопределенному методу, но оно не переходит к предыдущему действию
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
6 ответов
Ваш идентификатор неверен. поэтому, пожалуйста, измените свой идентификатор "R.id.home" на "android.R.id.home:".
switch (item.getItemId())
{
case android.R.id.home:
finish();
return true;
}
Попробуй это.
Вам нужно вызвать функцию onBackPressed
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
onBackPressed();
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Вы должны установить панель инструментов, прежде чем получить.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar mToolBar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(mToolBar);
getSupportActionBar().setTitle("Some titile);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
change code here*/
}
});
}
Пожалуйста, обратитесь ниже код
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(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);
}
}
Вам необходимо переопределить метод onBackPressed для обработки кнопки "назад" (кнопка "Домой") на панели действий.
@Override
public void onBackPressed() {
super.onBackPressed();
// your code here
// finish();
}
Для обеспечения правильной навигации вам необходимо:
Определите родительскую активность в манифесте.
<activity
android:name=".MainActivity"
android:parentActivityName=".HomeActivity"
....>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
И в MainActivity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
В XML-файле MainActivity должна быть панель инструментов. А затем переопределите onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
finish();
return true;
}
}
Вместо использования finish() вы должны рассмотреть возможность использования NavUtils.navigateUpFromSameTask(this)
или другие подобные методы класса NavUtils.
Используйте launchModes, например singleTop, чтобы предотвратить перезагрузку родительского действия.
Более подробную информацию о правильной навигации можно найти здесь.