Android ListFragment:加载程序完成后显示对话框

Android ListFragment:加载程序完成后显示对话框,android,android-listfragment,android-cursorloader,Android,Android Listfragment,Android Cursorloader,加载程序完成后,如何显示DialogFragment?当我在onLoadFinished()装入器回调中执行此操作时,我得到一个异常,即我无法在那里执行该操作。我想这是因为我试图在UI线程之外的其他地方显示对话框(因为ListFragment加载程序异步运行)。在装入程序完成时触发的封闭ListFragment中是否有其他回调或观察者 基本上,一旦列表视图被填充,我想检查列表。如果列表为空,我想显示一个信息对话框,让用户了解如何为列表创建项目 在onLoadFinished()内调用Dialog

加载程序完成后,如何显示DialogFragment?当我在onLoadFinished()装入器回调中执行此操作时,我得到一个异常,即我无法在那里执行该操作。我想这是因为我试图在UI线程之外的其他地方显示对话框(因为ListFragment加载程序异步运行)。在装入程序完成时触发的封闭ListFragment中是否有其他回调或观察者

基本上,一旦列表视图被填充,我想检查列表。如果列表为空,我想显示一个信息对话框,让用户了解如何为列表创建项目

在onLoadFinished()内调用DialogFragment.show()时显示的异常为:

09-18 10:51:08.974 25310-25310/[pkg]E/AndroidRuntime﹕ 致命异常:主
java.lang.IllegalStateException:无法在onLoadFinished内部执行此操作

您无法在onLoadFinished和其他回调中添加片段。这是和我有关的。尽管您可以从中创建与DialogFragment相同的包,但可以扩展它并使用ovveride show方法。但你最好不要这样做

来自:

…没有任何声明将在UI线程上调用onLoadFinished的内容,因此理论上,您应该使用类似Reto书中建议的处理程序

考虑到这一点,应采取以下措施:

 @Override
 public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
     runOnUiThread(new Runnable() {
         @Override
         public void run() {
             // Show your dialog here.
         }
     });
 }
@覆盖
public void onLoadFinished(加载器,光标){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//在这里显示您的对话框。
}
});
}

假设您的侦听器是在活动中实现的。否则,请使用。

有什么例外?我已经在帖子中添加了例外。看来你是对的。你试过RunNouithRead吗?我刚试过curtisLoew描述的RunNouithRead,但我得到了相同的异常。好的,然后像这样运行你的Runnable:new Handler().post(r)