【问题标题】:Android - How to ListView Fast Filter instantlyAndroid - 如何立即 ListView 快速过滤
【发布时间】:2014-06-10 04:18:04
【问题描述】:

我有一个词典数据库,包含超过 300,000 个单词,使用 cursoradapter 填充 ListView。 ListView过滤一个词时,软件有延迟,有什么方法可以立即过滤?

这是Main的代码

    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    db=new WordDbAdapter(this);
    db.openDatabase();

    Cursor cursor=db.getAllWord();
    adapter=new SimpleCursorAdapter(this, R.layout.listview_item, cursor,new            String[] {"word"},new int[] {R.id.title}, 0);


    lv=(ListView) findViewById(R.id.listView1);
    lv.setAdapter(adapter);
    filter=(EditText) findViewById(R.id.editText1);


    filter.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            adapter.getFilter().filter(cs.toString());

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }
    });

这是数据库的代码:

public Cursor getAllWord()
{
    Cursor cursor = null;
    try {


        String sql="select rowid _id,word from anh_viet";
         cursor=mdb.rawQuery(sql, null);


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
    }
    return cursor;

}
public Cursor filterWord(String key)
{
    Cursor cursor = null;
    try {


        String sql="select rowid _id,word from anh_viet where word like '"+key+"%'";
         cursor=mdb.rawQuery(sql, null);


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
    }
    return cursor;

}

【问题讨论】:

    标签: android listview dictionary android-cursoradapter


    【解决方案1】:

    永远不要写这样的查询:

    String sql="select rowid _id,word from anh_viet where word like '"+key+"%'";

    它不安全(您可以进行 SQL 注入)并且每次都需要数据库重新解析和优化查询。而是使用绑定变量作为键。这将允许它缓存搜索(加快搜索速度)并防止任何 SQL 注入的可能性。

    【讨论】:

    • 你能详细解释一下吗?
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    相关资源
    最近更新 更多