如何在Android中对自定义ListView进行筛选

4
我正在使用自定义列表视图从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 );

你如何填充你的列表视图? - Szymon
你可以查看这个链接:https://dev59.com/IWoy5IYBdhLWcg3wPbyd?lq=1 - Pradip
另外,如果您从资源加载数据,请不要使用array_str_name_eng、language等命名方式,而是使用带有后缀的资源。 - Andrew Matiuk
3个回答

0

你不应该过滤ListView,而是适配器。

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

数据加载完成时:

adapter.setData(your data);

搜索:

adapter.filter(searchQuery)

在setData中,过滤方法不要忘记调用notifyDataSetChanged()。

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

希望这个有所帮助。

0

如果您正在使用EditText进行搜索,则必须编写自己的过滤方法。这里有一个示例自定义ListView搜索。如果您无法理解,请告诉我,我会帮助您。


谢谢@Ketan,这个例子对我很有帮助。 - Hitesh Kamani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接