我不明白在哪里调用用 Loader 的数据填充片段的方法更好。根据应用程序请求的模式,一个片段附加到活动,其中填充了来自相应加载器的数据。或多或少是这样的:
Cursor cursor; //Курсор который инициализируется лоадером
getLoaderManager().initLoader(0, null, this);
someFragment f = new SomeFragment();
if ( cursor.moveToFirst() ) {
f.getData(cursor.getString(0)) //передает данные из курсора во внутренний метод фрагмента, который наполняет его информацией
}
getFragmentManager().beginTransaction().add(R.id.frame, f).commit(); //и заполненный фрагмент выводится на экран
由于加载程序在单独的线程中加载数据,因此它们没有时间初始化游标,并且在 cursor.moveToFirst() 行中,访问了一个空对象。
是否有可能以某种方式暂停片段输出,直到游标被初始化?我还尝试用来自 onLoadFinished() 方法的数据填充片段;并从那里显示片段,但文档中的注释令人困惑:
请注意,在此调用中,通常不允许应用程序提交片段事务,因为它可能发生在保存活动状态之后。
在用信息填充之前在屏幕上显示一个空片段是不可取的。有人可以建议实现逻辑的最佳方法吗?我想做一个类似新兴进度条的东西,显示加载数据的进度并冻结应用程序界面(直到出现数据和片段,实际上没有UI,所以在这种情况下并不关键),但我可以'弄清楚此时如何挂起主线程,判断下载完成后继续线程。
使用接口,当你的加载器加载调用接口方法时,它将调用
someFragment f = new SomeFragment(); if ( cursor.moveToFirst() ) { f.getData(cursor.getString(0)) //передает данные из курсора во внутренний метод фрагмента, который наполняет его информацией } getFragmentManager().beginTransaction().add(R.id.frame, f).commit(); //и заполненный фрагмент выводится на экран一切都会好的,一切如你所愿