如何在android中过滤自定义列表视图

时间:2013-09-11 10:23:02

标签: 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;                             
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 );

3 个答案:

答案 0 :(得分:0)

如果您使用EditText进行搜索,那么您必须编写自己的过滤方法。这里有一个示例Custom ListView Search。如果你不能得到它,请告诉我,我会帮助你。

答案 1 :(得分:0)

您不应该过滤ListView,而应该过滤器,

Adapter adapter = new CustomAdapter();
ListView_res_name_main_cetegires.setAdapter(adapter);

加载数据:

adapter.setData(your data);

搜索:

adapter.filter(searchQuery)
在setData中,过滤方法不要忘记调用notifyDataSetChanged()

答案 2 :(得分:0)

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

**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>

活动代码:

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));
}
});
}

希望这个有所帮助。