4

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

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

3 回答 3

0

如果您使用 EditText 进行搜索,那么您必须编写自己的过滤器方法..这是一个示例Custom ListView Search。如果你不能得到它然后让我知道我会帮助你。

于 2013-09-11T10:28:18.273 回答
0

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

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

关于加载的数据:

adapter.setData(your data);

在搜索:

adapter.filter(searchQuery)

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

于 2013-09-11T10:38:55.353 回答
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));
}
});
}

希望这个有帮助。

于 2013-09-11T10:39:51.030 回答