1. 程式人生 > >Android 搜尋框的實時查詢/模糊查詢

Android 搜尋框的實時查詢/模糊查詢

參考

http://www.cnblogs.com/jeffen/p/6958235.html

http://blog.csdn.net/ljd4305/article/details/39375163

這裡實現的是搜尋框時時查詢,程式碼中是在資料庫中使用的模糊查詢;

整個佈局使用的是線性佈局,搜尋框又是一個線性佈局(裡面包含一個相對佈局和一個TextView,相對佈局裡面有一個EditText和ImageVIew),下面是一個ListView;

搜尋框其實就是一個EditText,背景是用shape自己畫出來的;上面放一個“刪除”的圖片;

在Activity中給EditText設定一個監聽,當輸入文字的時候獲取輸入的內容然後查詢資料庫,將查詢到的資料展示到ListView中;

看下程式碼:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical">  
      
        <LinearLayout  
            android:layout_width="match_parent"  
            android:layout_height="43dp"  
            android:background="@color/colorPrimaryDark"  
            android:gravity="center"  
            android:orientation="horizontal">  
      
            <RelativeLayout  
                android:layout_width="0dp"  
                android:layout_height="match_parent"  
                android:layout_weight="1">  
      
                <EditText  
                    android:id="@+id/edittext"  
                    android:layout_width="match_parent"  
                    android:layout_height="match_parent"  
                    android:layout_marginBottom="8dp"  
                    android:layout_marginLeft="10dp"  
                    android:layout_marginTop="8dp"  
                    android:background="@drawable/searchbox_bj"  
                    android:hint="請輸入搜尋內容"  
                    android:maxLength="10"  
                    android:paddingLeft="15dp"  
                    android:singleLine="true"  
                    android:textSize="12sp" />  
      
                <ImageView  
                    android:id="@+id/imageview"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:layout_alignParentRight="true"  
                    android:layout_centerInParent="true"  
                    android:paddingRight="20dp"  
                    android:src="@drawable/delete"  
                    android:visibility="gone" />  
      
            </RelativeLayout>  
      
            <TextView  
                android:id="@+id/textview"  
                android:layout_width="wrap_content"  
                android:layout_height="match_parent"  
                android:gravity="center"  
                android:paddingLeft="10dp"  
                android:paddingRight="10dp"  
                android:text="搜尋"  
                android:textColor="#ffffff"  
                android:textSize="20sp" />  
        </LinearLayout>  
      
        <ListView  
            android:id="@+id/listview"  
            android:layout_width="match_parent"  
            android:layout_height="0dp"  
            android:layout_weight="1"></ListView>  
    </LinearLayout>  

要在EditText文字改變前執行查詢 資料庫的操作並實時展示
    public class MainActivity extends Activity {  
      
        private EditText mEditText;  
        private ImageView mImageView;  
        private ListView mListView;  
        private TextView mTextView;  
        Context context;  
        Cursor cursor;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            context = this;  
              
            initView();  
        }  
      
        private void initView() {  
            mTextView = (TextView) findViewById(R.id.textview);  
            mEditText = (EditText) findViewById(R.id.edittext);  
            mImageView = (ImageView) findViewById(R.id.imageview);  
            mListView = (ListView) findViewById(R.id.listview);  
      
            //設定刪除圖片的點選事件  
            mImageView.setOnClickListener(new View.OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                    //把EditText內容設定為空  
                    mEditText.setText("");  
                    //把ListView隱藏  
                    mListView.setVisibility(View.GONE);  
                }  
            });  
      
            //EditText新增監聽  
            mEditText.addTextChangedListener(new TextWatcher() {  
                  
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {}//文字改變之前執行  
      
                @Override  
                //文字改變的時候執行  
                public void onTextChanged(CharSequence s, int start, int before, int count) {  
                    //如果長度為0  
                    if (s.length() == 0) {  
                        //隱藏“刪除”圖片  
                        mImageView.setVisibility(View.GONE);  
                    } else {//長度不為0  
                        //顯示“刪除圖片”  
                        mImageView.setVisibility(View.VISIBLE);  
                        //顯示ListView  
                        showListView();  
                    }  
                }  
      
                public void afterTextChanged(Editable s) { }//文字改變之後執行  
            });  
      
            mTextView.setOnClickListener(new View.OnClickListener() {  
                  
                public void onClick(View v) {  
                    //如果輸入框內容為空,提示請輸入搜尋內容  
                    if(TextUtils.isEmpty(mEditText.getText().toString().trim())){  
                        ToastUtils.showToast(context,"請輸入您要搜尋的內容");  
                    }else {  
                        //判斷cursor是否為空  
                        if (cursor != null) {  
                            int columnCount = cursor.getCount();  
                            if (columnCount == 0) {  
                                ToastUtils.showToast(context, "對不起,沒有你要搜尋的內容");  
                            }  
                        }  
                    }  
      
                }  
            });  
        }  
      
        private void showListView() {  
            mListView.setVisibility(View.VISIBLE);  
            //獲得輸入的內容  
            String str = mEditText.getText().toString().trim();  
            //獲取資料庫物件  
            MyOpenHelper myOpenHelper = new MyOpenHelper(getApplicationContext());  
            SQLiteDatabase db = myOpenHelper.getReadableDatabase();  
            //得到cursor  
            cursor = db.rawQuery("select * from lol where name like '%" + str + "%'", null);  
            MyListViewCursorAdapter adapter = new MyListViewCursorAdapter(context, cursor);  
      
            mListView.setAdapter(adapter);  
      
            mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
                @Override  
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
                    //把cursor移動到指定行  
                    cursor.moveToPosition(position);  
                    String name = cursor.getString(cursor.getColumnIndex("name"));  
                    ToastUtils.showToast(context, name);  
                }  
            });  
        }  
    }  
CharSequence s, int start, int before, int count(CharSequence s, int start, int before, int count)方法中做判斷,s是EditText中的文字內容;
判斷如果s長度為0隱藏“刪除”圖片,否則顯示“刪除圖片”,顯示ListView,查詢資料庫獲得Cursor獲得CursorAdapter將內容展示到ListView中;