Android edittext + listview advanced implementation: custom filter for the content in the search listview, edittextlistview

Source: Internet
Author: User

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.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.