Android edittext + listview advanced implementation: custom filter for the content in the search listview, edittextlistview
The last time we directly used the arrayadapter and the simple_list1 layout file that comes with the system. however, in development, we basically won't use such a simple cell. Next we will talk about how to customize our own filters so that he can search for what he wants.
:
Listview_cell layout:
<? Xml version = "1.0" encoding = "UTF-8"?> <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "match_parent" android: layout_height = "match_parent" android: orientation = "horizontal"> <ImageView android: id = "@ + id/iv_logo" android: layout_width = "wrap_content" android: layout_height = "50dp" android: layout_alignParentLeft = "true" android: layout_alignParentTop = "true" android: src = "@ drawable/ic_launcher"/> <LinearLayout android: layout_width = "wrap_content" android: layout_height = "50dp" android: orientation = "vertical"> <TextView android: id = "@ + id/TV _name" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "name" android: layout_weight = "1"/> <TextView android: id = "@ + id/TV _show" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "I am my different fireworks" android: layout_weight = "1"/> </LinearLayout>
Activity_main layout:
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:orientation="vertical" tools:context="com.example.testedittextlistview.MainActivity" > <include layout="@layout/myedittext" /> <ListView android:id="@+id/lv_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000" > </ListView></LinearLayout>
Listview_adapter:
Package com. example. testedittextlistview; import java. util. arrayList; import java. util. iterator; import java. util. list; import android. content. context; import android. text. textUtils; import android. view. view; import android. view. viewGroup; import android. widget. baseAdapter; import android. widget. filter; import android. widget. imageView; import android. widget. textView; public class MyListViewAdapter extends BaseAdapter {// This is the sum of our data sets. During filtering, this should be a constant private List <People> myforeverlist; // Context menu private context Context; // This is a set of private List <People> mFilteredArrayList that records the data that meets the requirements during filtering; // This is, private List <People> myPeopleList; public MyListViewAdapter (Context context, List <People> list) {this. context = context; this. myforeverlist = list; // initialize some of our intermediate variables to mFilteredArrayList = new ArrayList <People> (); myPeopleList = new ArrayList <People> (); // get the data we passed in to this set. save the integrity of the original set myPeopleList. addAll (myforeverlist) ;}@ Overridepublic int getCount () {return myPeopleList. size () ;}@ Overridepublic People getItem (int position) {return myPeopleList. get (position) ;}@ Overridepublic long getItemId (int position) {// TODO Auto-generated method stubreturn position ;}@ Overridepublic View getView (int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif (convertView = null) {vHolder = new viewHolder (); convertView = View. inflate (context, R. layout. listview_cell, null); vHolder. iv_logo = (ImageView) convertView. findViewById (R. id. iv_logo); vHolder. TV _name = (TextView) convertView. findViewById (R. id. TV _name); vHolder. TV _show = (TextView) convertView. findViewById (R. id. TV _show); convertView. setTag (vHolder);} else {vHolder = (viewHolder) convertView. getTag ();} // vHolder. iv_logo.setImageResource (resId); vHolder. TV _name.setText (getItem (position ). getName (); vHolder. TV _show.setText (getItem (position ). getShow (); return convertView;} private viewHolder vHolder; class viewHolder {public ImageView iv_logo; public TextView TV _name; public TextView TV _show;} private NameFilter nameFilter; public NameFilter getFilter () {if (nameFilter = null) {nameFilter = new NameFilter () ;}return nameFilter ;} // Filter data class NameFilter extends Filter {// execute Filter @ Overrideprotected FilterResults extends mfiltering (CharSequence charSequence) {FilterResults filterResults = new FilterResults (); if (TextUtils. isEmpty (charSequence) {mFilteredArrayList. clear (); // clear filterResults. values = myforeverlist; return filterResults;} else {mFilteredArrayList. clear (); // clear for (Iterator <People> iterator = myforeverlist. iterator (); iterator. hasNext ();) {People name = iterator. next (); if (name. getName (). contains (charSequence) {mFilteredArrayList. add (name) ;}} filterResults. values = mFilteredArrayList; return filterResults; }}// filter result @ Overrideprotected void publishResults (CharSequence arg0, FilterResults results) {myPeopleList = (ArrayList <People>) results. values; if (results. count> 0) {policydatasetchanged ();} else {policydatasetinvalidated ();}}}}
Activity_main.java:
Package com. example. testedittextlistview; import java. util. arrayList; import java. util. list; import android. app. activity; import android. content. context; import android. OS. bundle; import android. text. editable; import android. text. textWatcher; import android. view. menu; import android. view. menuItem; import android. view. view; import android. view. windowManager; import android. view. view. onClickListener; import andro Id. view. inputmethod. inputMethodManager; import android. widget. adapterView; import android. widget. adapterView. onItemClickListener; import android. widget. arrayAdapter; import android. widget. editText; import android. widget. imageButton; import android. widget. listView; import android. widget. toast; public class MainActivity extends Activity {private EditText query; private ImageButton search_clear; private ListVi Ew lv_main; // The control input box displays the hidden code private InputMethodManager inputMethodManager; @ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_main); initView ();} private void initView () {inputMethodManager = (InputMethodManager) getSystemService (Context. INPUT_METHOD_SERVICE); query = (EditText) findViewById (R. id. query); search_clear = (ImageButt On) findViewById (R. id. search_clear); search_clear.setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {// click to clear the query. getText (). clear (); hideSoftKeyboard (); // hide keyboard}); // listview initializes the control and enriches lv_main = (ListView) findViewById (R. id. lv_main); List <People> list = new ArrayList <People> (); for (int I = 1; I <10; I ++) {People tPeople = new People (); if (I <4) {// make the content slightly different. setName ("Tes T "+ I); tPeople. setShow ("don't go home tonight" + I);} else {tPeople. setName ("HAHA" + I); tPeople. setShow ("Love tonight" + I);} list. add (tPeople);} final MyListViewAdapter adapter = new MyListViewAdapter (getApplicationContext (), list); lv_main.setAdapter (adapter); // add a click event lv_main.setOnItemClickListener (new OnItemClickListener () for listview () {@ Overridepublic void onItemClick (AdapterView <?> Parent, View view, int position, long id) {// The adapter is used here. getItem (position) // instead of myString [position]. If the second type is used, the effect is very poor. makeText (getApplicationContext (), "click" + adapter. getItem (position ). getName (), Toast. LENGTH_SHORT ). show () ;}}); // added a listener for edittext. Set the adapter in onTextChanged to set the filter condition query. addTextChangedListener (new TextWatcher () {@ Overridepublic void onTextChanged (CharSequence s, int start, in T before, int count) {adapter. getFilter (). filter (s); if (s. length ()> 0) {search_clear.setVisibility (View. VISIBLE);} else {search_clear.setVisibility (View. GONE) ;}}// the following two methods can directly ignore @ Overridepublic void beforeTextChanged (CharSequence s, int start, int count, int after) {}@ Overridepublic void afterTextChanged (Editable s) {}});}/*** hide sample code of the Input Method */void hideSoftKeyboard () {if (getWindow (). getAttributes (). softI NputMode! = WindowManager. LayoutParams. SOFT_INPUT_STATE_HIDDEN) {if (getCurrentFocus ()! = Null) inputMethodManager. hideSoftInputFromWindow (getCurrentFocus (). getWindowToken (), InputMethodManager. HIDE_NOT_ALWAYS );}}}
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.