This example for you to share the Android search function, and need to display the history of the search for your reference, the specific content as follows
Effect Chart:
This case is simple to implement, so it can be directly embedded in the project using the knowledge points involved:
-database additions and deletions to check operations
-Nested conflict resolution for ListView and ScrollView
-Monitor Soft keyboard return button set to search button
-Real-time filtering using Textwatcher ()
-Search for keywords again search not duplicate add to database
-Just enter the page to set the soft keyboard does not automatically eject because of EditText
Code
Recordsqliteopenhelper.java
Package com.cwvs.microlife;
Import Android.content.Context;
Import Android.database.sqlite.SQLiteDatabase;
Import Android.database.sqlite.SQLiteOpenHelper;
public class Recordsqliteopenhelper extends Sqliteopenhelper {
private static String name = "Temp.db";
private static Integer Version = 1;
Public Recordsqliteopenhelper {
Super (context, name, null, version);
}
@Override public
void OnCreate (Sqlitedatabase db) {
db.execsql ("CREATE TABLE records" (ID integer primary key Autoincrement,name varchar) ");
}
@Override public
void Onupgrade (sqlitedatabase db, int oldversion, int newversion) {
}
}
Mainactivity.java
Package com.cwvs.microlife;
Import Java.util.Date;
Import android.app.Activity;
Import Android.content.Context;
Import Android.database.Cursor;
Import Android.database.sqlite.SQLiteDatabase;
Import android.graphics.drawable.Drawable;
Import Android.os.Bundle;
Import android.text.Editable;
Import Android.text.TextWatcher;
Import android.view.KeyEvent;
Import Android.view.View;
Import Android.view.Window;
Import Android.view.inputmethod.InputMethodManager;
Import Android.widget.AdapterView;
Import Android.widget.BaseAdapter;
Import Android.widget.CursorAdapter;
Import Android.widget.EditText;
Import Android.widget.SimpleCursorAdapter;
Import Android.widget.TextView;
Import Android.widget.Toast;
public class Mainactivity extends activity {private EditText et_search;
Private TextView Tv_tip;
Private Mylistview ListView;
Private TextView tv_clear;
Private Recordsqliteopenhelper helper = new Recordsqliteopenhelper (this);;
Private Sqlitedatabase DB; Private Baseadapter AdaPter;
@Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate);
Requestwindowfeature (Window.feature_no_title);
Setcontentview (R.layout.activity_main);
Initialize control Initview ();
Empty Search History Tv_clear.setonclicklistener (new View.onclicklistener () {@Override public void OnClick (View v) {
DeleteData ();
Querydata ("");
}
}); Search box of the keyboard search key click Callback Et_search.setonkeylistener (New View.onkeylistener () {//Enter the keyboard after the search key public boolean onkey (View V, int keycode, keyevent event) {if (keycode = = Keyevent.keycode_enter && event.getaction () = KeyEvent. Action_down) {//Modify the Return key function//First hide the keyboard ((Inputmethodmanager) Getsystemservice (Context.input_method_service)
). Hidesoftinputfromwindow (Getcurrentfocus (). Getwindowtoken (), inputmethodmanager.hide_not_always); Saves the keyword for the current query after you press the search key, and does not perform the save if the keyword already exists boolean hasData = HasData (et_search.gettext (). toString (). Trim ());
if (!hasdata) {InsertData (Et_search.gettext (). toString (). Trim ());
Querydata (""); //TODO Query the product based on the input content, and jump to another interface, by yourself to achieve toast.maketext (Mainactivity.this, "clicked!", toast.length_s
Hort). Show ();
return false;
}
}); Text changes in the search box real-time listening Et_search.addtextchangedlistener (new Textwatcher () {@Override public void Beforetextchang Ed (charsequence s, int start, int count, int after) {} @Override public void ontextchanged (Charsequen
Ce s, int start, int before, int count) {} @Override public void aftertextchanged (Editable s) {
if (s.tostring (). Trim (). Length () = 0) {tv_tip.settext ("Search History");
else {tv_tip.settext ("search results");
String tempname = Et_search.gettext (). toString ();
According to Tempname, there is no data querydata (tempname) in the fuzzy query database;
}
}); Listview.setonitemclicklistener (New Adapterview.onitemclicklistener () {@Override public void Onitemclick ( Adapterview<?> Parent, view view, int position, long id) {TextView TextView = (TextView) View.findviewbyid ( Android.
R.ID.TEXT1);
String name = Textview.gettext (). toString ();
Et_search.settext (name);
Toast.maketext (mainactivity.this, Name, Toast.length_short). Show ();
TODO gets the text above the item, jumps to another page query according to the keyword, and implements it by yourself}};
Insert data, easy to test, otherwise first enter no data how to test it?
Date date = new Date ();
Long time = Date.gettime ();
InsertData ("Leo" + time);
First access to all historical records Querydata ("");
/** * Insert data/private void InsertData (String tempname) {db = Helper.getwritabledatabase ();
Db.execsql ("INSERT Into records (name) values (' + tempname + ')");
Db.close (); /** * Fuzzy query data */private void Querydata (String tempname) {Cursor Cursor = Helper.getreadabledatabase (). RA
Wquery ( "SELECT ID as _id,name from records where name is"% "+ tempname +"% ' ORDER by id DESC ", null); Create Adapter Adapter Object adapter = new Simplecursoradapter (this, Android. R.layout.simple_list_item_1, cursor, new string[] {"Name"}, new int[] {Android.
R.ID.TEXT1}, Cursoradapter.flag_register_content_observer);
Set adapter Listview.setadapter (adapter);
Adapter.notifydatasetchanged (); /** * Check the database for this record */private Boolean hasData (String tempname) {Cursor Cursor = Helper.getreadabledata
Base (). Rawquery ("SELECT ID as _id,name from records where name =?", new String[]{tempname});
Determine if there is a next return Cursor.movetonext ();
/** * EMPTY data * * private void DeleteData () {db = Helper.getwritabledatabase ();
Db.execsql ("Delete from Records");
Db.close ();
private void Initview () {Et_search = (edittext) Findviewbyid (R.id.et_search);
Tv_tip = (TextView) Findviewbyid (R.id.tv_tip); ListView = (COM.CWVS.microlife.mylistview) Findviewbyid (R.id.listview);
Tv_clear = (TextView) Findviewbyid (r.id.tv_clear);
Adjusts the size of the search button on the left of the edittext drawable drawable = Getresources (). getdrawable (R.drawable.search); Drawable.setbounds (0, 0, 60, 60);//10th is the distance from the left, 20th is the distance from the top, 60 is the long width et_search.setcompounddrawables (drawable, NULL, NULL, n
ULL);//Left Only}}
Mylistview.java
Package com.cwvs.microlife;
Import Android.content.Context;
Import Android.util.AttributeSet;
Import Android.widget.ListView;
public class Mylistview extends ListView {public
Mylistview (context) {
super (context);
}
Public Mylistview (context, AttributeSet attrs) {
Super (context, attrs);
}
Public Mylistview (context, AttributeSet attrs, int defstyle) {
Super (context, attrs, Defstyle);
}
@Override
protected void onmeasure (int widthmeasurespec, int heightmeasurespec) {
int expandspec = Measurespec.makemeasurespec (Integer.max_value >> 2,
measurespec.at_most);
Super.onmeasure (Widthmeasurespec, Expandspec);
}
Activity_main.xml
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http:// Schemas.android.com/tools "android:layout_width=" match_parent "android:layout_height=" Match_parent "Android: Focusableintouchmode= "true" android:orientation= "vertical" tools:context= "${relativepackage}.${activityclass}" > <linearlayout android:layout_width= "fill_parent" android:layout_height= "50DP" android:background= "# E54141 "android:orientation=" horizontal "android:paddingright=" 16DP "> <imageview android:layout_w
Idth= "45DP" android:layout_height= "45DP" android:layout_gravity= "center_vertical" android:padding= "10DP" android:src= "@drawable/back"/> <edittext android:id= "@+id/et_search" 0DP "android:layout_height=" Match_parent "android:layout_weight=" 1 "android:background=" @null "and roid:drawableleft= "@drawable/search" Android:drawablepadding= "8DP" android:gravity= "start|center_vertical" android:hint= "Enter the keyword" android:imeoptions= "of the query Actionsear
Ch "android:singleline=" true "android:textcolor=" @android: Color/white "android:textsize=" 16sp "/> </LinearLayout> <scrollview android:layout_width= "wrap_content" android:layout_height= "Wrap_content" &
Gt <linearlayout android:layout_width= "match_parent" android:layout_height= "Wrap_content" android:orient ation= "vertical" > <linearlayout android:layout_width= "match_parent" android:layout_height= "WR"
Ap_content "android:orientation=" vertical "android:paddingleft=" 20DP "> <textview
Android:id= "@+id/tv_tip" android:layout_width= "match_parent" android:layout_height= "50DP" Android:gravity= "left|center_vertical" android:text= "Search History"/> <view Android:lay Out_width= "MATCH_parent "android:layout_height=" 1DP "android:background=" #EEEEEE "></View> <com.c Wvs.microlife.MyListView android:id= "@+id/listview" android:layout_width= "Match_parent" Andr
oid:layout_height= "Wrap_content" ></com.cwvs.microlife.MyListView> </LinearLayout> <view Android:layout_width= "Match_parent" android:layout_height= "1DP" android:background= "#EEEEEE" >< ;/view> <textview android:id= "@+id/tv_clear" android:layout_width= "Match_parent" Andr oid:layout_height= "40DP" android:background= "#F6F6F6" android:gravity= "center" android:text= "clears the search calendar History "/> <view android:layout_width=" match_parent "android:layout_height=" 1DP "android:l Ayout_marginbottom= "20DP" android:background= "#EEEEEE" ></View> </LinearLayout> </scrollvi Ew> </linearlayout>
The above is the entire content of this article, I hope to help you learn.