英文:
onResume never been called when click the phone hardware back button on android?
问题
我面临这个问题,我有一个 MainActivity 和一个 SettingsPreference,所以我想在从设置返回到 MainActivity 时在 MainActivity 中重新加载适配器。我使用了 onResume(),当我点击 ActionBar 的返回按钮时,它的效果非常好,但是当我尝试在硬件返回按钮上使用时,它从未被调用过,我发现系统调用了 onPostResume() 而不是 onResume(),所以尝试使用它,但是更改从未被应用。
这是我使用的 SettingsActivity:
这段代码在按下 ActionBar 返回按钮时起作用
```java
@Override
protected void onResume() {
super.onResume();
dataFromSharedPrefrence = getSettingsSharedPreferences();
adapterExample.notifyDataSetChanged();
}
当按下硬件返回按钮时,系统调用 onPostResume(),但更改不会被应用:
@Override
protected void onPostResume() {
super.onPostResume();
dataFromSharedPrefrence = getSettingsSharedPreferences();
adapterExample.notifyDataSetChanged();
}
这是 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);
}
}
}
我发现当我重写生命周期方法时有以下差异:
- 当按下 ActionBar 按钮时,输出如下:
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
- 当按下硬件返回按钮时,输出如下:
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
<details>
<summary>英文:</summary>
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
[this is the SettingsActivity i'm using][1]
This code works when the ActionBar back button is pressed
@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
@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
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
2. when hardware back button is pressed this is the 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
[1]: https://i.stack.imgur.com/CACa9.png
</details>
# 答案1
**得分**: 0
**试试这个:**
不要使用 `onResume()`,尝试使用 `onStart()`:
```java
@Override
protected void onStart() {
super.onStart();
dataFromSharedPrefrence = getSettingsSharedPreferences();
adapterExample.notifyDataSetChanged();
}
英文:
Try this:
Instead of using onResume()
try onStart()
:
@Override
protected void onStart() {
super.onStart();
dataFromSharedPrefrence = getSettingsSharedPreferences();
adapterExample.notifyDataSetChanged();
}
专注分享java语言的经验与见解,让所有开发者获益!
评论