Android 生命周期混乱
Android Life Cycle confusion
已更新以描述请求的代码;更新到此结束。
我正在尝试做一些看起来应该很简单的事情,但是 Android 生命周期似乎没有按照描述的那样工作。我希望这是我的误解,而不是 Android!
中的错误
我是 Android 的新手,在为 Windows 开发了 Java 应用程序后才开始熟悉 Android 生命周期,所以我仍在努力解决很多新想法,尤其是生命周期。
我几乎完成了我的第一个基于 RecyclerView 的应用程序。它显示了一家小公司的一堆销售记录(每条记录代表一次销售)。用户可以点击 FloatingActionButton 来报告新的销售,或者点击编辑或删除单个记录上的图标来更改销售的详细信息或完全删除它。这些东西中的每一个都有自己的 activity。此外,还有一个 SettingsActivity 来显示设置。
其中一项设置允许用户 select 从三种不同的日期格式中选择一种来显示销售日期。当我退出设置(通过点击后退按钮)时,我想立即使用新更改的日期格式查看可见行,但这并没有发生。到目前为止,我只是点击按钮将我带到其他活动之一,然后在我到达那里时点击取消按钮;返回我的主 activity,我会看到新的日期格式。
我觉得我的用户不必去另一个 activity;只需从“设置”返回即可立即更改日期。我开始研究 Android 生命周期。当我阅读文档时,我应该覆盖 onResume() 方法并向控制 RecyclerView 的适配器发出 notifyDataChanged() 以使其使用新的日期格式重新绑定可见行。
不幸的是,就我所见,这没有任何效果。这是我的简历:
@Override
protected void onResume() {
super.onResume();
mAdapter.notifyDataSetChanged();
}
我是不是用错误的方法执行了 notifyDataSetChanged()?如果没有,为什么它不起作用?如果这是错误的方法,我应该覆盖哪种方法?
是否有我应该阅读或观看的解释生命周期的特别好的文字或视频教程?
更新
日期格式是在我的SettingsActivity中设置的,这是SettingsActivity模板中默认提供的一种,根据我的需要量身定做。我所接触的只是常规设置。我用我自己的六个设置替换了模板中的所有设置。一种称为日期格式,默认为 YYYY-MM-DD;还有其他两个选择。
我的主要 activity,它是通过菜单选项调用 SettingsActivity 的,从默认的 SharedPreferences 获取日期格式的值。这是因为我不想为 ArrayList 中的每一行查找一次 Date 格式的值,而是只为 ArrayList 中的所有行查找一次。我通过其构造函数将日期格式的值传递给适配器。该格式在 OnBindViewHolder() 中用于控制日期在各种销售记录上的外观。
为您的适配器定义一个设置方法,
public class MyAdapter extends RecyclerView.Adapter<AdapterContactList.ViewHolder> {
private String dateFormat;
.....
public void setDateFormat(String dateFormat) {
this.dateFormat = dateFormat;
}
}
用户更改日期格式后;将其设置为您的适配器,然后通知数据进行更改。这意味着,您需要在 notifyDataSetChanged
方法之前设置新的日期格式;因为适配器不知道新值。
@Override
protected void onResume() {
super.onResume();
String newDateFormat = getFromSharedPreferencesOrInstantly();
mAdapter.setDateFormat(newDateFormat);
mAdapter.notifyDataSetChanged();
}
已更新以描述请求的代码;更新到此结束。
我正在尝试做一些看起来应该很简单的事情,但是 Android 生命周期似乎没有按照描述的那样工作。我希望这是我的误解,而不是 Android!
中的错误我是 Android 的新手,在为 Windows 开发了 Java 应用程序后才开始熟悉 Android 生命周期,所以我仍在努力解决很多新想法,尤其是生命周期。
我几乎完成了我的第一个基于 RecyclerView 的应用程序。它显示了一家小公司的一堆销售记录(每条记录代表一次销售)。用户可以点击 FloatingActionButton 来报告新的销售,或者点击编辑或删除单个记录上的图标来更改销售的详细信息或完全删除它。这些东西中的每一个都有自己的 activity。此外,还有一个 SettingsActivity 来显示设置。
其中一项设置允许用户 select 从三种不同的日期格式中选择一种来显示销售日期。当我退出设置(通过点击后退按钮)时,我想立即使用新更改的日期格式查看可见行,但这并没有发生。到目前为止,我只是点击按钮将我带到其他活动之一,然后在我到达那里时点击取消按钮;返回我的主 activity,我会看到新的日期格式。
我觉得我的用户不必去另一个 activity;只需从“设置”返回即可立即更改日期。我开始研究 Android 生命周期。当我阅读文档时,我应该覆盖 onResume() 方法并向控制 RecyclerView 的适配器发出 notifyDataChanged() 以使其使用新的日期格式重新绑定可见行。
不幸的是,就我所见,这没有任何效果。这是我的简历:
@Override
protected void onResume() {
super.onResume();
mAdapter.notifyDataSetChanged();
}
我是不是用错误的方法执行了 notifyDataSetChanged()?如果没有,为什么它不起作用?如果这是错误的方法,我应该覆盖哪种方法?
是否有我应该阅读或观看的解释生命周期的特别好的文字或视频教程?
更新
日期格式是在我的SettingsActivity中设置的,这是SettingsActivity模板中默认提供的一种,根据我的需要量身定做。我所接触的只是常规设置。我用我自己的六个设置替换了模板中的所有设置。一种称为日期格式,默认为 YYYY-MM-DD;还有其他两个选择。
我的主要 activity,它是通过菜单选项调用 SettingsActivity 的,从默认的 SharedPreferences 获取日期格式的值。这是因为我不想为 ArrayList 中的每一行查找一次 Date 格式的值,而是只为 ArrayList 中的所有行查找一次。我通过其构造函数将日期格式的值传递给适配器。该格式在 OnBindViewHolder() 中用于控制日期在各种销售记录上的外观。
为您的适配器定义一个设置方法,
public class MyAdapter extends RecyclerView.Adapter<AdapterContactList.ViewHolder> {
private String dateFormat;
.....
public void setDateFormat(String dateFormat) {
this.dateFormat = dateFormat;
}
}
用户更改日期格式后;将其设置为您的适配器,然后通知数据进行更改。这意味着,您需要在 notifyDataSetChanged
方法之前设置新的日期格式;因为适配器不知道新值。
@Override
protected void onResume() {
super.onResume();
String newDateFormat = getFromSharedPreferencesOrInstantly();
mAdapter.setDateFormat(newDateFormat);
mAdapter.notifyDataSetChanged();
}