3

我有一个扩展的 CursorAdapter 类,它使用我的 sqlite 数据库中的数据完成一个建议列表。到目前为止,使用 android 2.3 可以正常工作,但现在在 android 4.0.1 中感觉很慢。其次,另一件事是建议列表的滚动速度也很慢。Ice Cream Sandwich 中的 CursorAdapter 是否存在任何已知问题?在 Nexus S 设备上测试。

编辑:

我改变了我的方法并尝试使用 CursorLoader 但仍然需要很长时间才能运行查询并填写我的自动完成列表。

创建:

mSuggestionAdapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_2, null,
            new String[] { "name_en", "pcode" },
            new int[] { android.R.id.text1, android.R.id.text2 }, 0);
    search_text.setAdapter(mSuggestionAdapter);

getLoaderManager().initLoader(0, null, this);

onTextChanged:

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            getLoaderManager().restartLoader(0, null, MapActivity.this);
        }

游标加载器接口:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {

    Uri baseUri = SearchableProvider.CONTENT_URI;

    String select = DataBaseHelper.getWhereStatement(search_text.getText().toString());
    return new CursorLoader(this, baseUri,
            DataBaseHelper.SEARCHABLE_SUMMARY_PROJECTION, select, null,
            "name_en" );

    //return null;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // TODO Auto-generated method stub
    mSuggestionAdapter.swapCursor(data);

}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    // TODO Auto-generated method stub
    mSuggestionAdapter.swapCursor(null);
}

对 ArrayAdapter 也进行了同样的尝试。我在一段时间(20 到 30 秒)后得到数据,但自动完成 Textview 的列表没有出现。

延迟在 onCreateLoader(异步返回 CursorLoader)和 onLoadFinished() 之间。

4

1 回答 1

1

SimpleCursorAdapter由于同样的原因已被弃用。谷歌建议使用CursorLoader而不是SimpleCursorAdapter为了更快的速度。ArrayAdapter也是个好主意。

http://developer.android.com/reference/android/content/CursorLoader.html

于 2012-04-02T07:43:50.233 回答