Активность не возвращается к предыдущей активности при нажатии кнопки навигации назад на панели действий.

Моя активность расширяет 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, чтобы предотвратить перезагрузку родительского действия.

Более подробную информацию о правильной навигации можно найти здесь.

Другие вопросы по тегам