我通过启动多个加载器将数据从游标加载到列表视图中。我希望我的列表视图显示来自所有游标的数据,但列表视图中的数据以 2 秒的间隔立即更改,并且仅显示最后一个游标的数据。请帮我。我哪里出错了?我必须合并游标吗?
在我的片段的 onCreateView() 内部:
for (int i = 0; i < idsArray.length; i++) {
Bundle b = new Bundle();
b.putInt("id", idsArray[i]);
getLoaderManager().initLoader(idsArray[i], b, this); //initiating multiple loaders
}
adapter = new CustomAdapter(getActivity(), R.layout.list_row, null, column_names_array, ui_ids_array, 0);
listView.setAdapter(adapter);
和加载器回调方法:
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle b) {
Builder uriBuilder = MY_PROVIDER_URI.buildUpon();
uriBuilder.appendPath("categories");
uriBuilder.appendPath(String.valueOf(b.getInt("id")));
uriBuilder.appendPath("data");
return new CursorLoader(getActivity(), uriBuilder.build(), null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if(adapter != null && data != null){
adapter.swapCursor(data);
adapter.notifyDataSetChanged();
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
这是我的适配器类:
public class CustomAdapter extends SimpleCursorAdapter {
Cursor cursor;
Context context;
Activity activity;
int layout;
public CustomAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags ) {
super(context, layout, c, from, to, flags);
this.cursor = c;
this.context = context;
this.activity = (Activity) context;
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(this.layout, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
ViewHolder holder = (ViewHolder) view.getTag();
if (holder == null) {
holder = new ViewHolder();
//finding UI elements in list row here
view.setTag(holder);
}
//binding data to views of viewholder here
}
static class ViewHolder {
//variables of all my UI elements
}
}