小编Imp*_*Dev的帖子

DisogFragment被取消时的回调

我想启动一个带有自定义布局的对话框,我已经通过DialogFragment实现了该对话框.(我基本上只是改变了onCreateView()并添加了按钮处理程序).该对话框允许用户快速更改重要设置.

该对话框将从几个不同的活动中启动.不同的活动没有太多共同之处,只是在用户更改设置后需要刷新.他们不需要从对话中获取任何信息; 他们只需要知道何时关闭(被解雇).

我试过的

我尝试在onResume()中刷新活动,但启动和解除对话框似乎永远不会调用此方法.(所以我不确定它为什么会存在,但这可能是另一个问题的主题.)

接下来,我尝试在对话框中添加DialogInterface.OnDismissListener:

public static void showMyDialog(OnDismissListener listener, Activity activity)
{
    DialogFragment fragment = new MyDialogFragment();
    fragment.show(activity.getFragmentManager(), "date");
    activity.getFragmentManager().executePendingTransactions();//A
    fragment.getDialog().setOnDismissListener(listener);//B
}
Run Code Online (Sandbox Code Playgroud)

当我最初省略A行时,我在B行得到了NullPointerException,因为此时对话框为null.根据这个SO答案的建议,我调用了executePendingTransaction().这会在B行导致IllegalStateException,并且消息"OnDismissListener已被DialogFragment占用,无法替换." 我也尝试在调用show()之前放入setOnDismissListener(),但这总是导致NullPointerException.

然后我读了另一个SO答案,其中说原始提问者"在DialogFragment的生命周期中过早地调用getDialog()." 所以我尝试在DialogFragment中添加一个构造函数:

public MyDialogFragment(SomeCallback illTakeAnythingICanGet)
{
    //I'll store the callback here and call it later
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,添加一个构造函数让Android Lint发出致命的警告,当我查了一下时,我在这个问题中发现了一条评论,似乎说这种方法会让对话无法处理用户在对话框中旋转屏幕开了.

问题

如果用户旋转屏幕,当DialogFragment关闭(被解雇)的方式不会破坏我的应用程序时,活动如何计算?我应该在DialogFragment之外使用其他东西吗?

android dialog

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

具有条件的相关子查询的SQLite更新语法

我正在使用SQLite数据库中的GTFS数据.我有一个StopTimes表,其中包含trip_id,stop_sequence和departure_time(以及其他)列.我想为每次旅行取消最后一次出发时间(在具有最大stop_sequence的元组中).

我能想到的最明显的方法就是这个查询:

UPDATE StopTimes AS A
SET departure_time = NULL
WHERE NOT EXISTS
(
    SELECT * FROM StopTimes B
    WHERE B.stop_sequence > A.stop_sequence
)
Run Code Online (Sandbox Code Playgroud)

不幸的是,看起来我不能在SQLite的UPDATE语句中为表使用别名.查询失败(在Python中)"sqlite3.OperationalError:near"AS":语法错误",SQLite中也不允许使用其他样式:

UPDATE A
SET departure_time = NULL
FROM StopTimes AS A
WHERE NOT EXISTS
(
    SELECT * FROM StopTimes B
    WHERE B.stop_sequence > A.stop_sequence
)
Run Code Online (Sandbox Code Playgroud)

我尝试了其他一些变体,例如使用"> = ALL(SELECT stop_sequence ... WHERE trip_id =?...)",但我无法填写该问号.

我也试过这个,但看起来这不是有效的SQL:

UPDATE StopTimes
SET departure_time = NULL
WHERE (trip_id, stop_sequence) IN
(
    SELECT trip_id, MAX(stop_sequence)
    FROM StopTimes
    GROUP BY trip_id
)
Run Code Online (Sandbox Code Playgroud)

如何使用SQLite将接受的语法在UPDATE查询中的子查询中引用外部表的属性?有没有什么方法可以重新构建我的查询以解决这个限制?

sql sqlite gtfs

6
推荐指数
1
解决办法
2069
查看次数

标签 统计

android ×1

dialog ×1

gtfs ×1

sql ×1

sqlite ×1