如何在Android中实现Search Activity

来源:互联网 发布:ubuntu如何安装vmtools 编辑:程序博客网 时间:2024/06/09 14:53

废话少说,先放效果图:


Layout文件内容如下:

这里要注意的是ListView的id一定要命名为 “@android:id/list",否则会出现异常。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:orientation="horizontal" >        <EditText            android:id="@+id/txtSearchKeyword"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1" >            <requestFocus >            </requestFocus>        </EditText>        <Button            android:id="@+id/btnSearch"            android:layout_width="100dp"            android:layout_height="wrap_content"            android:text="搜索" >        </Button>    </LinearLayout>    <FrameLayout        android:layout_width="match_parent"        android:layout_height="0dip"        android:layout_weight="1" >        <!--             Here is the list. Since we are using a ListActivity, we             have to call it "@android:id/list" so ListActivity will             find it        -->        <ListView            android:id="@android:id/list"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:drawSelectorOnTop="false" />        <!-- Here is the view to show if the list is emtpy -->        <TextView            android:id="@+id/empty"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="test" />    </FrameLayout></LinearLayout>

Activity的Java代码如下:

其中用到的DBHelper是自己实现的数据库辅助类,用到的search方法请大家自行实现。

package xxxx.xxxxx;import android.app.ListActivity;import android.content.Context;import android.graphics.Color;import android.os.Bundle;import android.text.Spannable;import android.text.style.ForegroundColorSpan;import android.util.Log;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListAdapter;import android.widget.TextView;public class SearchActivity extends ListActivity{DBHelper db;Context context = null;BibleArrayAdapter<String> mAdapter;Button btnSearch;EditText txtSearchKeyword;java.lang.String mKeyword = null;private String[] mStrings = new String[] {};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context = this;setContentView(R.layout.search_activity);// Tell the list view which view to display when the list is emptygetListView().setEmptyView(findViewById(R.id.empty)); txtSearchKeyword = (EditText) findViewById(R.id.txtSearchKeyword);        //为搜索按钮添加事件btnSearch = (Button) findViewById(R.id.btnSearch);btnSearch.setOnClickListener(mSearchButtonListener);setListAdapter(getMyListAdapter());}private OnClickListener mSearchButtonListener = new OnClickListener() {public void onClick(View v) {mAdapter.Search(txtSearchKeyword.getText().toString());}};private ListAdapter getMyListAdapter() {mAdapter = new BibleArrayAdapter<String>(this,R.layout.my_list_view, mStrings);return mAdapter;}@SuppressWarnings({ "hiding", "rawtypes" })class BibleArrayAdapter<String> extends ArrayAdapter {@SuppressWarnings("unchecked")public BibleArrayAdapter(SearchActivity searchActivity, int resource,Object[] objects) {super(searchActivity, resource, objects);}/** * 重画listview中每个Item */public View getView(int position, View convertView, ViewGroup parent) {View row = convertView;java.lang.String content;java.lang.String label;StringBuffer sb = new StringBuffer(mStrings[position]);if (row == null) {LayoutInflater inflater = getLayoutInflater();row = inflater.inflate(R.layout.c_row, parent, false);}content = sb.toString();TextView tvContent = (TextView) row.findViewById(R.id.content);tvContent.setTextSize(TypedValue.COMPLEX_UNIT_DIP, Constant.fontsize);tvContent.setTextColor(Color.BLACK);tvContent.setBackgroundColor(Color.WHITE);tvContent.setPadding(0, 5, 0, 5);//高亮显示关键字tvContent.setText(content,TextView.BufferType.SPANNABLE);if (content.indexOf(mKeyword) >= 0) {Spannable sp = (Spannable) tvContent.getText();  sp.setSpan(new ForegroundColorSpan(Color.RED), content.indexOf(mKeyword), content.indexOf(mKeyword)+mKeyword.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return row;}/** * 搜索框,写在内部类中是因为要用到notifyDataSetChanged方法 * @param keyword */public void Search(java.lang.String keyword) {db = new DBHelper(context);try {mKeyword = keyword;mStrings = db.search(keyword);setListAdapter(getMyListAdapter());notifyDataSetChanged();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (db != null) db.close();}}}}


原创粉丝点击