简体   繁体   English

单击 android 上的电话硬件后退按钮时从未调用过 onResume?

[英]onResume never been called when click the phone hardware back button on android?

I'm facing this problem I have MainActivity and SettingsPreference so i want to reload adapter on MainActivity when i return from settings to MainActivity i used onResume() it worked vary good when i click on ActionBar back button, but when i try it on hardware back button it it never been called,i find out that the system calls on onPostResume() instead of onResume() so try to use it, but the changes are never been applied我正面临这个问题,我有 MainActivity 和 SettingsPreference,所以当我从设置返回到 MainActivity 时我想在 MainActivity 上重新加载适配器我使用了 onResume() 当我点击 ActionBar 后退按钮时它工作得很好,但是当我在硬件上尝试它时后退按钮它从未被调用过,我发现系统调用 onPostResume() 而不是 onResume() 所以尝试使用它,但从未应用更改

this is the SettingsActivity i'm using这是我正在使用的 SettingsActivity

This code works when the ActionBar back button is pressed当按下 ActionBar 后退按钮时,此代码有效

      @Override
          protected void onResume() {
              super.onResume();
              dataFromSharedPrefrence = getSettingsSharedPreferences();
              adapterExample.notifyDataSetChanged();

          }

The system calls onPostResume() when hardware back button is pressed but the changes never applied当硬件后退按钮被按下但更改从未应用时,系统调用 onPostResume()

@Override
        protected void onPostResume() {
              super.onPostResume();
              dataFromSharedPrefrence = getSettingsSharedPreferences();
              adapterExample.notifyDataSetChanged();
}

This is the SettingsActivity这是设置活动

public class SettingsActivity extends AppCompatActivity {

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


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

I find out this difference when i Override lifecycle methods当我覆盖生命周期方法时,我发现了这种差异

  1. When ActionBar button is pressed this is the output当按下 ActionBar 按钮时,这是 output
2020-05-05 06:00:44.899 23467-23467/com.example.test E/MainActivity: onDestroy
2020-05-05 06:00:44.907 23467-23467/com.example.test E/MainActivity: onDetachedFromWindow
2020-05-05 06:00:44.964 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:44.990 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:45.009 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:45.015 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:45.037 23467-23467/com.example.test E/MainActivity: onContentChanged
2020-05-05 06:00:45.048 23467-23467/com.example.test E/MainActivity: onStart
2020-05-05 06:00:45.051 23467-23467/com.example.test E/MainActivity: onPostCreate
2020-05-05 06:00:45.053 23467-23467/com.example.test E/MainActivity: onResume
2020-05-05 06:00:45.056 23467-23467/com.example.test E/MainActivity: onPostResume
2020-05-05 06:00:45.078 23467-23467/com.example.test E/MainActivity: onAttachedToWindow
2020-05-05 06:00:45.141 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:45.188 23467-23467/com.example.test E/MainActivity: onCreateView
2020-05-05 06:00:45.223 23467-23467/com.example.test E/MainActivity: onCreateView
  1. when hardware back button is pressed this is the output当按下硬件后退按钮时,这是 output

2020-05-05 06:01:21.732 23467-23467/com.example.test E/MainActivity: onRestart
2020-05-05 06:01:21.734 23467-23467/com.example.test E/MainActivity: onStart
2020-05-05 06:01:21.738 23467-23467/com.example.test E/MainActivity: onResume
2020-05-05 06:01:21.739 23467-23467/com.example.test E/MainActivity: onPostResume

Try this:试试这个:

Instead of using onResume() try onStart() :不要使用onResume()尝试onStart()

  @Override
      protected void onStart() {
          super.onStart();
          dataFromSharedPrefrence = getSettingsSharedPreferences();
          adapterExample.notifyDataSetChanged();

      }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM