Android Custom ListView: добавление функции поиска

У меня проблема, я хочу, чтобы EditText над моим ListView выполнял поиск в этом ListView. Можно ли это сделать?

Это код операции:

public static class BirreChiareListView extends Main implements AdapterView.OnItemClickListener { ListView list; String [] birrechiare; int [] images={R.drawable.ichnusa, R.drawable.ichnusa_speciale, R.drawable.ichnusa_cruda}; private MyAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(birrechiare_listview); Resources res=getResources(); birrechiare=res.getStringArray(R.array.birre_chiare); list = (ListView)findViewById(R.id.listViewBirreChiare); MyAdapter adapter = new MyAdapter(this,birrechiare, images); list.setAdapter(adapter); list.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long l) { String item = adapter.getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext(), "Hai selezionato: " + item, Toast.LENGTH_SHORT).show(); if (position == 0){ Intent gotoclassica = new Intent(BirreChiareListView.this,Ichnusa_Classica.class); startActivity(gotoclassica); } if (position == 1){ Intent gotospeciale = new Intent(BirreChiareListView.this,Ichnusa_Speciale.class); startActivity(gotospeciale); } if (position == 2){ Intent gotocruda = new Intent(BirreChiareListView.this,Ichnusa_Cruda.class); startActivity(gotocruda); } } } static class MyAdapter extends ArrayAdapter<String> { Context context; int[] images; String[] titleArray; MyAdapter(Context c, String[] titles, int imgs []){ super (c, single_row, R.id.Titletxt, titles); this.context = c; this.images=imgs; this.titleArray=titles; } @Override public View getView (int position, View convertView, ViewGroup parent){ LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE); View row=inflater.inflate(single_row, parent,false); ImageView myimage = (ImageView) row.findViewById(R.id.imageView); TextView mytitle = (TextView) row.findViewById(R.id.Titletxt); myimage.setImageResource(images[position]); mytitle.setText(titleArray[position]); return row; } } 

Хорошо, это XML-файл ListView:

 <?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" android:background="@drawable/background_listview"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Birre Chiare" android:singleLine="false" android:textColor="#FFFFFF" android:gravity="center"/> <EditText android:id="@+id/search" android:layout_width="fill_parent" android:layout_height="wrap_content" > <requestFocus /> </EditText> <ListView android:id="@+id/listViewBirreChiare" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </LinearLayout> 

В конце это файл single_row.xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/imageView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:src="@drawable/ichnusa"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/Titletxt" android:layout_alignBottom="@+id/imageView" android:layout_toRightOf="@+id/imageView" android:layout_marginBottom="35dp" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout> 

Да, это определенно возможно. Android предоставляет ArrayAdapter интерфейс для ArrayAdapter s. Интерфейс предоставляет метод getFilter() котором вы можете подключиться к процессу фильтрации.

Когда текст изменяется в вашем EditText , вы вызываете adapter.getFilter().filter("filterString") . Изменение текста для EditText выполняется с помощью TextWatcher в EditText . В этом следующем учебном пособии подробно объясняется это:

http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html

РЕДАКТИРОВАТЬ:

Чтобы реализовать фильтруемый интерфейс, просто сделайте это в своем ArrayAdapter :

 static class MyAdapter extends ArrayAdapter<String> implements Filterable { private Filter myFilter; @Override public Filter getFilter() { if (myFilter == null) myFilter = new MyFilter(); return myFilter; } } 

Где MyFilter – ваш собственный класс Filter .

Intereting Posts
Android Studio не работает при создании приложения с помощью AppCompat v23 и API21 OkHTTP используется внутри Android-устройств> 4.4 при использовании HttpUrlConnection? Удаление «окна» из флажка в Android Запрос Царства можно использовать IN? Где хранить звуковые файлы в проекте и какое решение выбрать для хранения реферансов к ним OnBackPressed не работает должным образом Как я могу реализовать хром, как «авто-скрыть навигацию» для моего приложения для Android? Получить размер представления контента в onCreate Отключить уведомления в URI ContentProvider Откройте html-файл, расположенный внутри моего приложения, используя WebView Второе подключение к серверному сотлу отказалось в android IllegalArgumentException при добавлении облачных сообщений api в GoogleApiClient Невозможно построить с помощью градиента, когда сервисы Google Play добавлены как зависимость Дизайн экрана исчез в студии Android 2.2 Как проверить CheckBox ListView при щелчке по элементу?