2

尝试从实现 LoaderCallbacks 接口的 Fragment 的 onLoadFinished 方法中显示 DialogFragment 时收到异常。基本上我正在使用 LoaderCallbacks 从休息服务中获取一些数据,然后在 onLoadFinished 上我试图显示一个包含 ListVeiw 的自定义 DialogFragment 以允许用户进行选择。一切都很好,除非我尝试从 onLoadFinished 中启动对话框。我怎样才能做到这一点..这是解决问题的正确方法。

这是我正在尝试做的一个例子:

public class EventFragment extends Fragment implements LoaderCallbacks<someresponse> {

    @Override
    public void onLoadFinished(Loader<someresponse> arg0, someresponse data) {
        //an exception is generated when trying to launch a dialog fragment from 
        //within the onLoadFinished
        FragmentManager manager = getFragmentManager();             
        ListViewDialogFragment dialog = ListViewDialogFragment.newInstance(data);   
        dialog.show(manager, "event_list_dialog");  

    }
}

谢谢!

4

2 回答 2

5

所以经过一番研究,我确定我的方法是不正确的。您永远不应尝试从 LoaderCallbacks 异步任务的 onLoadFinished 方法中启动新片段。该框架试图阻止您这样做,因为当前运行的片段或活动的状态,实现 LoaderCallbacks 是不确定的,因此不能保证在异步任务完成时存在。

此外,试图将处理对话框状态和数据显示状态分成两个单独的片段,这有点违背 android 框架支持的 MVC 设计模式。也就是说,我的新方法包括动态更改实现 LoaderCallbacks 的片段的视图,以隐藏或显示特定的线性布局,一个用于流程指示器,一个用于显示数据。这种方法让我修改了现有的片段,而不是启动一个效果很好的新片段。

这是一个讨论的链接,最终让我明白了。

https://groups.google.com/forum/#!topic/android-developers/dXZZjhRjkMk/discussion

于 2012-09-04T17:49:39.997 回答
1

您定义的方法非常好,除了一种情况 - 如果您的活动已经从屏幕上消失,加载操作完成时会发生什么?在这种情况下它将如何显示对话框?

所以一般来说,如果你能说出你得到了哪个例外,我将不胜感激。然而,作为一种通用方法,检查持有该片段的活动是否仍在顶部或什至它是否已完成可能很有用。更好的是 - 当活动/片段正在破坏时,您应该考虑取消所有后台操作,在这种情况下,您不会有显示对话框的问题。

祝你好运!

于 2012-09-02T17:20:20.673 回答