繁体   English   中英

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

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

我正面临这个问题,我有 MainActivity 和 SettingsPreference,所以当我从设置返回到 MainActivity 时我想在 MainActivity 上重新加载适配器我使用了 onResume() 当我点击 ActionBar 后退按钮时它工作得很好,但是当我在硬件上尝试它时后退按钮它从未被调用过,我发现系统调用 onPostResume() 而不是 onResume() 所以尝试使用它,但从未应用更改

这是我正在使用的 SettingsActivity

当按下 ActionBar 后退按钮时,此代码有效

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

          }

当硬件后退按钮被按下但更改从未应用时,系统调用 onPostResume()

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

这是设置活动

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

当我覆盖生命周期方法时,我发现了这种差异

  1. 当按下 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. 当按下硬件后退按钮时,这是 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

试试这个:

不要使用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