相关疑难解决方法(0)

理解Fragment的setRetainInstance(boolean)

从文档开始:

public void setRetainInstance(boolean retain)

控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:

  • onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
  • 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
  • onAttach(Activity)和onActivityCreated(Bundle)仍将被调用.

我有一些问题:

  • 片段是否也保留其视图,还是会在配置更改时重新创建?"保留"究竟是什么意思?

  • 当用户离开活动时,片段是否会被销毁?

  • 为什么它不适用于后端堆栈上的碎片?

  • 哪个是使用此方法有意义的用例?

android android-fragments

328
推荐指数
4
解决办法
16万
查看次数

Jelly Bean DatePickerDialog ---有没有办法取消?

--- 主持人注意:今天(7月15日),我注意到有人在这里遇到过这个问题.但是我不确定将这个作为副本关闭是否合适,因为我认为我提供了一个更好的解释.我不确定是否应该编辑其他问题并将其粘贴到那里,但我不太愿意过多地改变别人的问题.---

我有一些奇怪的东西.

我不认为问题取决于您构建的SDK.设备操作系统版本是重要的.

问题#1:默认情况下不一致

DatePickerDialog在Jelly Bean中被更改了(?),现在只提供了一个Done按钮.以前的版本包括一个取消按钮,这可能会影响用户体验(不一致,以前Android版本的肌肉记忆).

复制:创建一个基本项目.把它放进去onCreate:

DatePickerDialog picker = new DatePickerDialog(
        this,
        new OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker v, int y, int m, int d) {
                Log.d("Picker", "Set!");
            }
        },
        2012, 6, 15);
picker.show();
Run Code Online (Sandbox Code Playgroud)

预期:在对话框中显示"取消"按钮.

当前:一个取消按钮不会出现.

截图: 4.0.3(OK)和 4.1.1(可能错误?).

问题#2:错误的解雇行为

Dialog会调用它应该调用的侦听器,然后始终调用OnDateSetListener侦听器.取消仍然调用set方法,并设置它调用方法两次.

复制:使用#1代码,但在下面添加代码(您将看到这解决了#1,但只能在视觉上/ UI):

picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
        new DialogInterface.OnClickListener() {
            @Override
            public …
Run Code Online (Sandbox Code Playgroud)

android datepicker android-datepicker android-4.2-jelly-bean

147
推荐指数
3
解决办法
3万
查看次数