【问题标题】:CursorAdapter works slow on android 4CursorAdapter 在 android 4 上运行缓慢
【发布时间】:2012-04-02 07:29:44
【问题描述】:

我有一个扩展的 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);
        }

CursorLoader 接口:

@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()之间。

【问题讨论】:

标签: android android-4.0-ice-cream-sandwich android-cursoradapter


【解决方案1】:

SimpleCursorAdapter 由于同样的原因已被弃用。 Google 建议使用CursorLoader 而不是SimpleCursorAdapter 以获得更好的速度。 ArrayAdapter 也是个好主意。

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

【讨论】:

  • 您好,谢谢您的回答。请检查我上面编辑的答案。我做错了什么或误解了你的答案吗?
  • SimpleCursorAdapter 没有被弃用,加载器和适配器是两个完全不同的东西......
猜你喜欢
  • 2018-07-28
  • 2014-02-25
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多