如何在android中过滤自定义listview

如何在android中过滤自定义listview,android,listview,search,Android,Listview,Search,我使用一个自定义列表视图从json解析获取数据, 现在我有一个edittext,用于搜索listview中列出的项目,如何实现搜索功能。任何帮助都将不胜感激 ListView_res_name_main_cetegires = (ListView) findViewById(R.id.list_costome_list_main_cetegories); Custome_res_main_cetegories customAdapter_res_name_main_cetegiores;

我使用一个自定义列表视图从json解析获取数据, 现在我有一个edittext,用于搜索listview中列出的项目,如何实现搜索功能。任何帮助都将不胜感激

ListView_res_name_main_cetegires = (ListView)     findViewById(R.id.list_costome_list_main_cetegories);
Custome_res_main_cetegories customAdapter_res_name_main_cetegiores;                             
if(language.equalsIgnoreCase("English"))
{
   customAdapter_res_name_main_cetegiores = new Custome_res_main_cetegories(getApplicationContext(), array_str_name_eng,language);
}else
{

   customAdapter_res_name_main_cetegiores = new Custome_res_main_cetegories(getApplicationContext(), array_str_name_arab,language);
}

ListView_res_name_main_cetegires.setAdapter(customAdapter_res_name_main_cetegiores );

如果使用EditText进行搜索,则必须编写自己的筛选方法。下面是一个示例。如果您无法获取,请告诉我我会帮助您。

您不应该筛选ListView,而应该筛选适配器

Adapter adapter = new CustomAdapter();
ListView_res_name_main_cetegires.setAdapter(adapter);
加载数据时:

adapter.setData(your data);
搜索时:

adapter.filter(searchQuery)

在setData中,筛选器方法不会忘记调用notifyDataSetChanged()

下面是在列表视图中实现搜索功能的示例。首先添加一个编辑文本,您将在其中输入要在列表视图中搜索的文本。以下是代码的其余部分:

**main.xml**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
                android:layout_width="fill_parent"
android:layout_height="fill_parent"
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical">
<EditText android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:hint="Search">
</EditText>

<ListView android:id="@+id/ListView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
**main.xml**
活动代码:

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class ListViewSearchExample extends Activity
{
private ListView lv;
private EditText et;
private String listview_array[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE",
"SIX", "SEVEN", "EIGHT", "NINE", "TEN" };
private ArrayList<String> array_sort= new ArrayList<String>();
int textlength=0;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

lv = (ListView) findViewById(R.id.ListView01);
et = (EditText) findViewById(R.id.EditText01);
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listview_array));

et.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
                                                                // Abstract Method of TextWatcher Interface.
}
public void beforeTextChanged(CharSequence s,
int start, int count, int after)
{
// Abstract Method of TextWatcher Interface.
}
public void onTextChanged(CharSequence s,
int start, int before, int count)
{
textlength = et.getText().length();
array_sort.clear();
for (int i = 0; i < listview_array.length; i++)
{
if (textlength <= listview_array[i].length())
{
if(et.getText().toString().equalsIgnoreCase(
(String)
listview_array[i].subSequence(0,
textlength)))
{
                                                                                                                array_sort.add(listview_array[i]);
                                                                                                }
                                                                                }
                                                                }
lv.setAdapter(new ArrayAdapter<String>
(ListViewSearchExample.this,
android.R.layout.simple_list_item_1, array_sort));
}
});
}
import java.util.ArrayList;
导入android.app.Activity;
导入android.os.Bundle;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.ListView;
公共类ListViewSearchExample扩展活动
{
私有ListView lv;
私人编辑;
私有字符串listview_数组[]={“一”、“二”、“三”、“四”、“五”,
“六”、“七”、“八”、“九”、“十”};
私有ArrayList数组_sort=新ArrayList();
int textlength=0;
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv=(ListView)findViewById(R.id.ListView01);
et=(EditText)findViewById(R.id.EditText01);
lv.setAdapter(新阵列适配器),
android.R.layout.simple_list_item_1,listview_array));
et.addTextChangedListener(新的TextWatcher()
{
公共无效后文本已更改(可编辑)
{
//TextWatcher接口的抽象方法。
}
更改前的公共无效文本(字符序列,
整数开始、整数计数、整数结束)
{
//TextWatcher接口的抽象方法。
}
公共void onTextChanged(字符序列,
整数开始、整数之前、整数计数)
{
textlength=et.getText().length();
数组_sort.clear();
for(int i=0;iif(textlength)你如何填充你的listview?你可以检查一下:另外,如果你从资源中加载数据不做数组,语言只使用带有PostFixesTanks@Ketan的资源,这个例子将对我帮助很大