在我的应用程序中,同时从不同位置打开了一些对话框。(某些对话框是自建的片段,其他对话框是AlertDialogs),这会导致其中一些消失,因为最后一个调用的对话框会关闭所有先前打开的对话框。
有没有一种很好的方法让他们排队并互相展示而不是像这样出现故障?
我正在考虑制作自己的对话框类,而不是处理对话框,而是加载下一个对话框,并在队列中没有任何对象时进行处理。我希望有一个更轻松的方法来解决我的问题,而无需付出很多努力。
您可以尝试自己的问题提示的解决方案;一个队列。该解决方案应与扩展Dialog类的任何对话框一起使用。
为此,将Dialog队列作为全局变量添加到您的活动中:
LinkedBlockingQueue<Dialog> dialogsToShow = new LinkedBlockingQueue<>();
Run Code Online (Sandbox Code Playgroud)
除上述内容外,在要显示对话框的活动中实现一种称为的方法,该方法showDialog()接受目标对话框作为参数。此方法将对话框添加到队列中,并且还确保对话框被调用后,在队列中调用要显示的下一个对话框。
void showDialog(final Dialog dialog) {
if(dialogsToShow.isEmpty()) {
dialog.show();
}
dialogsToShow.offer(dialog);
dialog.setOnDismissListener((d) -> {
dialogsToShow.remove(dialog);
if(!dialogsToShow.isEmpty()) {
dialogsToShow.peek().show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,我没有测试上面的代码。
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |