【问题标题】:how to filter the custom listview in android如何过滤android中的自定义列表视图
【发布时间】:2013-09-11 10:23:02
【问题描述】:

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

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

【问题讨论】:

  • 如何填充列表视图?
  • 你可以查看这个:stackoverflow.com/questions/8678163/…
  • 另外,如果你从资源中加载数据不要做array_str_name_eng,语言只使用带有后缀的资源

标签: android listview search


【解决方案1】:

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

【讨论】:

  • 感谢@Ketan,这个例子对我有很大帮助
【解决方案2】:

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

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

关于加载的数据:

adapter.setData(your data);

在搜索中:

adapter.filter(searchQuery)

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

【讨论】:

    【解决方案3】:

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

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

    希望对这个有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多