SearchView和Listview的绑定,模糊查询

本文介绍了一种使用SimpleCursorAdapter结合SQLite数据库实现实时模糊搜索的方法。通过MainActivity类和MySqliteHelper类的配合,实现了对person表中pname字段的模糊匹配,并通过ListView展示查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其中最重要的部分是应用了SimpleCursorAdapter
并且模糊查询处的语句

Cursor newCursor = helper.query("person", "pname like ?", new String[]{query+"%"});

public class MainActivity extends Activity {
002 
003     private ListView lv;
004     private SearchView sv;
005     private MySqliteHelper helper;
006     private SimpleCursorAdapter adapter;
007     
008     @Override
009     protected void onCreate(Bundle savedInstanceState) {
010         super.onCreate(savedInstanceState);
011         setContentView(R.layout.activity_main);
012         lv = (ListView) findViewById(R.id.lv);
013         sv = (SearchView) findViewById(R.id.search);
014         
015         helper = new MySqliteHelper(this);
016         Cursor cursor = helper.query("person");
017         adapter = new SimpleCursorAdapter(this, R.layout.listview, cursor, new String[]{"_id","pname","tel"}, newint[]{R.id.tvid,R.id.tvname,R.id.tvtel}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
018         lv.setAdapter(adapter);
019         
020         sv.setOnQueryTextListener(new OnQueryTextListener() {
021             
022             @Override
023             public boolean onQueryTextSubmit(String query) {
024                 // TODO Auto-generated method stub
025                 Cursor newCursor = helper.query("person", "pname like ?", new String[]{query+"%"});
026                 adapter.swapCursor(newCursor);
027                 return false;
028             }
029             @Override
030             public boolean onQueryTextChange(String newText) {
031                 // TODO Auto-generated method stub
032                 return false;
033             }
034         });
035     }
036 }
037 
038 
039 
040 public class MySqliteHelper extends SQLiteOpenHelper {
041 
042     private static final String DBNAME = "persons.db";
043     private static final int VERSION = 1;
044     private SQLiteDatabase db;
045     public MySqliteHelper(Context context) {
046         super(context, DBNAME, null, VERSION);
047         // TODO Auto-generated constructor stub
048     }
049 
050     @Override
051     public void onCreate(SQLiteDatabase db) {
052         // TODO Auto-generated method stub
053         this.db = db;
054         String sql = "create table if not exists person(_id integer primary key autoincrement,pname text,tel text)";
055         db.execSQL(sql);
056         
057         ContentValues cv = new ContentValues();
058         cv.put("pname", "张小贝");
059         cv.put("tel", "1231435678625");
060         db.insert("person", "pname", cv);
061         cv = new ContentValues();
062         cv.put("pname", "张小奇");
063         cv.put("tel", "1234532454325");
064         db.insert("person", "pname", cv);
065         cv = new ContentValues();
066         cv.put("pname", "赵小强");
067         cv.put("tel", "123498765325");
068         db.insert("person", "pname", cv);
069         cv = new ContentValues();
070         cv.put("pname", "刘二丫");
071         cv.put("tel", "1234567325");
072         db.insert("person", "pname", cv);
073         cv = new ContentValues();
074         cv.put("pname", "阿亚尔");
075         cv.put("tel", "098764345675425");
076         db.insert("person", "pname", cv);
077         cv = new ContentValues();
078         cv.put("pname", "清远飘逸");
079         cv.put("tel", "45654134778765");
080         db.insert("person", "pname", cv);
081         cv = new ContentValues();
082         cv.put("pname", "怡情");
083         cv.put("tel", "1234532454325");
084         db.insert("person", "pname", cv);
085         cv = new ContentValues();
086         cv.put("pname", "超脱");
087         cv.put("tel", "1234532454325");
088         db.insert("person", "pname", cv);
089     }
090 
091     @Override
092     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
093         if(newVersion>oldVersion){            
094             db.execSQL("drop table person");
095             onCreate(db);
096         }
097     }
098     public long insert(String tableName,ContentValues values){
099         if(db==null){
100             db = getReadableDatabase();
101         }
102         return db.insert(tableName, null, values);
103     }
104     public int update (String table,ContentValues values,String whereClause,String[] whereArgs){
105         if(db==null){
106             db = getReadableDatabase();
107         }
108         return db.update(table, values, whereClause, whereArgs);
109     }
110     public int delete(String table,String whereClause,String[] whereArgs){
111         if(db==null){
112             db = getReadableDatabase();
113         }
114         return db.delete(table, whereClause, whereArgs);
115     }
116     public Cursor query(String table){
117         if (null==db) {
118             db=getReadableDatabase();
119         }
120         return db.query(table, null, null, null, null, null, null);
121     }
122     public Cursor query(String table,String where,String[] whereArgs){
123         if(db==null){
124             db = getReadableDatabase();
125         }
126         return db.query(table, null, where, whereArgs, null, null, null);
127     }
128     public void destory(){
129         if(db==null){
130             db.close();
131         }
132     }
133 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值