۱۳۹۴/۱۱/۱۰, ۰۴:۰۶ ب.ظ
(۱۳۹۴/۱۱/۱۰, ۰۳:۴۲ ب.ظ)mahdi10539 نوشته: سلام
برای این کار باید 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
ممنون از راهنماییتون
آیا در مثال بالا از کتابخونه ای هم اضافه شده چون برخی از خط های کدهای جاوا رو خطا میده