ListFragment:Loader完成后显示对话框

时间:2014-09-18 15:34:14

标签: android android-listfragment android-cursorloader

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

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

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

09-18 10:51:08.974 25310-25310 / [pkg] E / AndroidRuntime:致命异常:主要     java.lang.IllegalStateException:无法在onLoadFinished

中执行此操作

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

来自helpful post

  

...没有任何说明onLoadFinished将在UI线程上调用,所以理论上你应该使用像Reto的书中建议的Handler ...

考虑到这一点,以下内容应该有效:

 @Override
 public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
     runOnUiThread(new Runnable() {
         @Override
         public void run() {
             // Show your dialog here.
         }
     });
 }

假设您的侦听器在Activity中实现。否则,请使用Handler