سلام
برای این کار باید CustomAdapter مربوطه رو از Filterable - Implement کنید و بعد از اون Filter خودتون رو درست کنید
کدهای فایل Activity_main.xml
کد های مربوط به list_item.xml
کدهای مربوط به کلاس Country.java
کدهای مربوط به فایل CustomAdapter.java
کدهای مربوط به فایل MainActivity.java
میتونید از مثال بالا الگو برداری کنید و برنامه خودتون رو درست کنید
چون در برنامه شما از WebView استفاده شده
جهت جستجو در محتوای webView از متد زیر استفاده کنید
برای این کار باید CustomAdapter مربوطه رو از Filterable - Implement کنید و بعد از اون Filter خودتون رو درست کنید
کدهای فایل 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:orientation="vertical"
android:padding="10dp"
tools:context=".MainActivity" >
<!-- Editext for Search -->
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/search_view_border"
android:iconifiedByDefault="false"
android:padding="2dp"
android:queryHint="Search...." />
<!-- ListView -->
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
کد های مربوط به list_item.xml
کد:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="2dp" >
<ImageView
android:id="@+id/flag"
android:layout_width="80dp"
android:layout_height="70dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/flag"
android:paddingBottom="10dp"
android:text="txt"
android:textColor="#000000"
android:textSize="20sp" />
<TextView
android:id="@+id/code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/name"
android:layout_below="@+id/name"
android:layout_marginLeft="5dp"
android:text="txt"
android:textColor="#000000"
android:textSize="16sp" />
</RelativeLayout>
کدهای مربوط به کلاس Country.java
کد:
public class Country {
String name;
String iso_code;
int flag;
Country(String name, String iso_code, int flag) {
this.name = name;
this.iso_code = iso_code;
this.flag = flag;
}
public String getIso_code() {
return iso_code;
}
public void setIso_code(String iso_code) {
this.iso_code = iso_code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
کدهای مربوط به فایل CustomAdapter.java
کد:
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomAdapter extends BaseAdapter implements Filterable {
Context context;
ArrayList<Country> countrylist;
ArrayList<Country> mStringFilterList;
ValueFilter valueFilter;
CustomAdapter(Context context , ArrayList<Country> countrylist) {
this.context = context;
this.countrylist = countrylist;
mStringFilterList = countrylist;
}
@Override
public int getCount() {
return countrylist.size();
}
@Override
public Object getItem(int position) {
return countrylist.get(position);
}
@Override
public long getItemId(int position) {
return countrylist.indexOf(getItem(position));
}
@Override
public View getView(int position , View convertView , ViewGroup parent ) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
TextView name_tv = (TextView) convertView.findViewById(R.id.name);
TextView iso_tv = (TextView) convertView.findViewById(R.id.code);
ImageView iv = (ImageView) convertView.findViewById(R.id.flag);
Country country = countrylist.get(position);
name_tv.setText(country.getName());
iso_tv.setText(country.getIso_code());
iv.setImageResource(country.getFlag());
}
return convertView;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<Country> filterList = new ArrayList<Country>();
for (int i = 0; i < mStringFilterList.size(); i++) {
if ( (mStringFilterList.get(i).getName().toUpperCase() )
.contains(constraint.toString().toUpperCase())) {
Country country = new Country(mStringFilterList.get(i)
.getName() , mStringFilterList.get(i)
.getIso_code() , mStringFilterList.get(i)
.getFlag());
filterList.add(country);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mStringFilterList.size();
results.values = mStringFilterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
countrylist = (ArrayList<Country>) results.values;
notifyDataSetChanged();
}
}
}
کدهای مربوط به فایل MainActivity.java
کد:
import java.util.ArrayList;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SearchView;
public class MainActivity extends Activity implements
SearchView.OnQueryTextListener {
ListView lv;
SearchView search_view;
String[] country_names , iso_codes ;
TypedArray country_flags ;
ArrayList<Country> countrylist ;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list_view);
search_view = (SearchView) findViewById(R.id.search_view);
country_names = getResources().getStringArray(R.array.country_names);
iso_codes = getResources().getStringArray(R.array.iso_Code);
country_flags = getResources().obtainTypedArray(R.array.country_flags);
countrylist = new ArrayList<Country>();
for (int i = 0; i < country_names.length; i++) {
Country country = new Country(country_names[i] , iso_codes[i] ,
country_flags.getResourceId(i, -1) );
countrylist.add(country);
}
adapter = new CustomAdapter(getApplicationContext(), countrylist );
lv.setAdapter(adapter);
search_view.setOnQueryTextListener(this);
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
}
میتونید از مثال بالا الگو برداری کنید و برنامه خودتون رو درست کنید
چون در برنامه شما از WebView استفاده شده
جهت جستجو در محتوای webView از متد زیر استفاده کنید
کد:
WebView.findAll