جستجو در listview در برنامه نویسی اندروید
سلاک دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش جستجو در listview در برنامه نویسی اندروید می پردازیم از جستجو برای فیلتر کردن استفاده می شود به طور مثال ما یکسری دیتا داریم می خوایم در آنها واژه “آموزش برنامه نویسی ” را جستجو کنیم در ادامه با ما همراه باشید .
ابتدا وارد layout اصلی خود شده در اینجا نام آن برابر با activity_main.xml است و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <RelativeLayout 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" tools:context=".MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:layout_below="@+id/editText" android:layout_alignLeft="@+id/editText" android:layout_alignStart="@+id/editText" /> </RelativeLayout> |
در بالا یک EditText برای جستجو قرار دارد و یک ListView برای قرار دادن داده ها.
سپس در بخش MainActivity.java کد های زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package ir.programchi; import android.support.v7.app.ActionBarActivity; 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.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private EditText filterText; private ArrayAdapter<String> listAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); filterText = (EditText)findViewById(R.id.editText); ListView itemList = (ListView)findViewById(R.id.listView); String [] listViewAdapterContent = {"School", "House", "Building", "Food", "Sports", "Dress", "Ring"}; listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, listViewAdapterContent); itemList.setAdapter(listAdapter); itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "Position " + position, Toast.LENGTH_LONG).show(); } }); filterText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { MainActivity.this.listAdapter.getFilter().filter(s); } @Override public void afterTextChanged(Editable s) { } }); } } |
در ابتدا یکسری داده sample را را در ListView قرار دادیم از آداپتور سفارشی هم استفاده نکردیم در صورتی که از آداپتور سفارشی استفاده کنیم باید این TextWatcher یا همان TextChangedListener را در داخل آداپتور قرار دهیم یکسری void های مختلف دیگر هم وجود دارد مثل beforeTextChanged (قبل از اینکه متن تغییر کند) و beforeTextChanged (بعد از اینکه متن تغییر کند) در اینجا ما از onTextChanged استفاده کردیم یعنی در لحظه که متن تغییر کرد فیلتر انجام شود.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.