Android生命周期混乱

时间:2018-08-11 02:26:27

标签: android android-lifecycle

已更新以描述所请求的代码;更新已结束。

我正在尝试做一些看起来应该很简单的事情,但是Android生命周期似乎并没有按照说明的那样工作。我希望这是我的误解,不是Android中的错误!

我是Android的新手,在为Windows开发Java应用程序后才刚刚熟悉Android生命周期,所以我仍在努力应对许多新想法,尤其是生命周期。

我几乎完成了我的第一个基于RecyclerView的应用程序。它显示了一家小公司的一堆销售记录(每条记录代表一个销售)。用户可以单击FloatingActionButton来报告新的销售,或者单击编辑或删除单个记录上的图标以更改销售的详细信息或将其完全删除。这些事物中的每一个都有其自己的活动。另外,还有一个SettingsActivity可以显示设置。

其中一项设置使用户可以从三种不同的日期格式中进行选择,以显示销售日期。当我退出“设置”(通过单击“后退”按钮)时,我想立即使用新更改的日期格式查看可见的行,但这没有发生。到目前为止,我只需要单击按钮即可将我带到其他活动之一,然后在到达那里时单击“取消”按钮。返回主要活动后,我会看到新的日期格式。

我认为我的用户不必参加其他活动;只需从“设置”返回,即可立即更改日期。我开始研究Android生命周期。在阅读文档时,我应该重写onResume()方法并向控制RecyclerView的适配器发出notifyDataChanged(),以使其使用新的日期格式重新绑定可见行。

不幸的是,无论我看到什么都没有效果。这是我的onResume:

    @Override
protected void onResume() {
    super.onResume();
    mAdapter.notifyDataSetChanged();
}

我用错误的方法执行notifyDataSetChanged()吗?如果没有,为什么它不起作用?如果方法错误,我应该覆盖哪个方法?

是否有特别好的文字或视频教程来说明我应该阅读或查看的生命周期?

更新

日期格式在我的SettingsActivity中设置,这是SettingsActivity模板中提供的默认格式,可以满足我的需求。我感动的只是“常规”设置。我用自己的六个设置替换了模板中的所有设置。一种称为日期格式,默认为YYYY-MM-DD;还有两个选择。

我的主要活动是通过菜单选项调用SettingsActivity的活动,它从默认的SharedPreferences获取日期格式的值。这是因为我不想为ArrayList中的每一行查询一次Date格式的值,而是为ArrayList中的所有行查询一次。我通过其构造函数将Date格式的值传递给Adapter。该格式用于OnBindViewHolder()中,以控制各种销售记录上日期的显示。

1 个答案:

答案 0 :(得分:1)

为您的适配器定义一个设置方法,

public class MyAdapter extends RecyclerView.Adapter<AdapterContactList.ViewHolder> {

    private String dateFormat;
    .....
    public void setDateFormat(String dateFormat) {
        this.dateFormat = dateFormat;
    }
}

用户更改日期格式后;将其设置为您的适配器,然后通知数据进行更改。这意味着您需要在notifyDataSetChanged方法之前设置新的dateformat;因为适配器不知道新值。

@Override
protected void onResume() {
    super.onResume();
    String newDateFormat = getFromSharedPreferencesOrInstantly();
    mAdapter.setDateFormat(newDateFormat);
    mAdapter.notifyDataSetChanged();
}
相关问题