не удается вернуться на предыдущую страницу

#android #settings

#Android #Настройки

Вопрос:

Я создал действие настройки. Когда пользователь нажимает кнопку «Настройка», он переходит с mainactivity на settingsactivity, но он не переходит на предыдущую страницу, когда я нажимаю кнопку «Назад» в верхней части панели действий, в ней говорится, что приложение продолжает останавливаться. Если я нажму кнопку возврата телефона, это сработает.

Здесь я прикрепил свою кодировку, исправив ее. Как я могу это сделать?

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_activity);
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.settings, new SettingsFragment())
            .commit();
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        NavUtils.navigateUpFromSameTask(this);
    }
    return super.onOptionsItemSelected(item);
}

public static class SettingsFragment extends PreferenceFragmentCompat {
   @Override
   public void onCreatePreferences(Bundle savedInstanceState, String rootKey) 
   {
       setPreferencesFromResource(R.xml.root_preferences, rootKey);
   }

}
  

Ответ №1:

Его предпочтительнее использовать finish() в activity, поскольку он автоматически вернется к последнему activity.

Ответ №2:

сначала добавьте в tollbar в файле XML

     <androidx.appcompat.widget.Toolbar
        android:id="@ id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" >
        <ImageView
            android:id="@ id/home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_back"/>
    </androidx.appcompat.widget.Toolbar>
  

и

   @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);
    }
}