我可以在同一个 activity 中同时 运行 多个加载程序吗?
Can I run many Loaders at the same time in the same activity?
我对Loader
的使用有疑问。
在我的例子中,我调用自己的 class 扩展 AsyncTaskLoader
和 return MyObject 的 List
。
public class MyActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyObject>> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getLoaderManager().initLoader(1, null, this);
getLoaderManager().initLoader(2_ID, null, this);
getLoaderManager().initLoader(3_ID, null, this);
...
}
}
我的问题是:我可以在同一个Activity
上同时运行多个Loader
吗?
每个 Loader 是否会在其 loadInBackground()
方法完成后调用我的 Activity
中实施的 onLoadFinished()
方法?
提前致谢。
是的,我们可以在一个 activity 中同时使用 运行 个具有唯一 ID 的加载程序,因为加载程序是一个异步进程。请在下面找到示例模板。
public class SampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample);
initLoaders();
}
private void initLoaders() {
getLoaderManager().initLoader(1, null, null);
getLoaderManager().initLoader(2, null, null);
getLoaderManager().initLoader(3, null, null);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = null;
switch (id) {
case 1:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
case 2:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
case 3:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
}
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case 1:
if (data != null && data.getCount() > 0)
setData1();
break;
case 2:
if (data != null && data.getCount() > 0)
setData2();
break;
case 3:
if (data != null && data.getCount() > 0)
setData3();
break;
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
}
我对Loader
的使用有疑问。
在我的例子中,我调用自己的 class 扩展 AsyncTaskLoader
和 return MyObject 的 List
。
public class MyActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyObject>> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getLoaderManager().initLoader(1, null, this);
getLoaderManager().initLoader(2_ID, null, this);
getLoaderManager().initLoader(3_ID, null, this);
...
}
}
我的问题是:我可以在同一个Activity
上同时运行多个Loader
吗?
每个 Loader 是否会在其 loadInBackground()
方法完成后调用我的 Activity
中实施的 onLoadFinished()
方法?
提前致谢。
是的,我们可以在一个 activity 中同时使用 运行 个具有唯一 ID 的加载程序,因为加载程序是一个异步进程。请在下面找到示例模板。
public class SampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample);
initLoaders();
}
private void initLoaders() {
getLoaderManager().initLoader(1, null, null);
getLoaderManager().initLoader(2, null, null);
getLoaderManager().initLoader(3, null, null);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = null;
switch (id) {
case 1:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
case 2:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
case 3:
cursorLoader = new CursorLoader(this, CONTENT_URI,
PROJECTION, selection, null, null);
break;
}
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case 1:
if (data != null && data.getCount() > 0)
setData1();
break;
case 2:
if (data != null && data.getCount() > 0)
setData2();
break;
case 3:
if (data != null && data.getCount() > 0)
setData3();
break;
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
}