Android 使用游标加载程序处理ListView中的不同查询

Android 使用游标加载程序处理ListView中的不同查询,android,cursor,android-cursoradapter,android-cursorloader,Android,Cursor,Android Cursoradapter,Android Cursorloader,我希望在单个ListView中反映sqlite数据库中不同时间的不同表中的数据 初始查询工作正常,如下所示: 我有一个自定义CursorAdapter类AutoCursorAdapter扩展了CursorAdapter,它可以显示光标中的任意数据: AutoCursorAdapter.newView查询光标并构造与列中数据类型对应的视图。 AutoCursorAdapter.bindView从游标获取数据,并为游标中的每一行数据填充在newView中创建的视图。 我还在拥有的片段中实现了一个加载

我希望在单个ListView中反映sqlite数据库中不同时间的不同表中的数据

初始查询工作正常,如下所示:

我有一个自定义CursorAdapter类AutoCursorAdapter扩展了CursorAdapter,它可以显示光标中的任意数据: AutoCursorAdapter.newView查询光标并构造与列中数据类型对应的视图。 AutoCursorAdapter.bindView从游标获取数据,并为游标中的每一行数据填充在newView中创建的视图。 我还在拥有的片段中实现了一个加载程序,如下所示:

public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>{
...
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         ...
         mListView = ((ListView) view.findViewById(R.id.listview));
         mAdapter = new AutoCursorAdapter(getActivity());
         mListView.setAdapter(mAdapter);
         return view;
     }

     public void onStart() {
        super.onStart();
        // Prepare the loader.  Either re-connect with an existing one,
        // or start a new one.
        LoaderManager lm = getLoaderManager();
        Bundle args = getArguments();
        lm.initLoader(LOADER_ID, args, this);
    }

    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        CursorLoader CursorLoader = new CursorLoader(getActivity());
        setupLoader(CursorLoader); //Sets the URI, projection etc. depending on app state
        return CursorLoader;
    }

    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);
    }
}
到目前为止,一切顺利。数据在初次运行时加载。假设它使用URI_A从表A中提取并显示数据

但现在的问题是:如果我想切换到使用URI_B显示表B中的数据以响应用户操作,我该如何处理这种情况

我可以用一个加载程序实例来实现这一点吗

如果是,怎么做?例如,CursorLoader.setUri不会触发重新加载。 如果没有,如何正确管理多个加载程序实例? 这是不是一个装载机可能不适合的例子

注意:问题不是关于表A中底层数据库中反映的更改。这已通过NotifyChange机制在UI中正确更新。这个问题是关于完全改变基础查询的性质

我可以用一个加载程序实例来实现这一点吗

我不推荐。加载器有足够的状态,试图像这样显著地更改它们可能会很麻烦,并且当它们都返回相同的数据类型(例如游标)时,拥有多个加载器并不是什么大问题

如果没有,如何正确管理多个加载程序实例


在initLoader的第二个参数中为它们使用不同的ID,并根据ID在onCreateLoader中创建正确的加载程序。

我正在着手实现这一点,还有另一个问题。您是否建议将多个适配器连接到一个视图?所以映射是:ListView 1