先看例子演示:
第一个是arrayAdapter,第二个是baseAdapter
部分java代码:
package mm.shandong.com.testbaseadapterfilter;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import mm.shandong.com.testbaseadapterfilter.adapter.BaseAdapterFilter;
import mm.shandong.com.testbaseadapterfilter.entity.Person;
public class TestBaseAdapterFilterActivity extends AppCompatActivity {
ListView listView1;
ListView listView2;
EditText editText;
List<Person> persons;
String[] person_names;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_base_adapter_filter);
listView1 = (ListView) findViewById(R.id.listView1);
listView2 = (ListView) findViewById(R.id.listView2);
//查询编辑框
editText = (EditText) findViewById(R.id.editText);
initData();
//listView1放置arrayAdapter,arrayAapter自带过滤字符串的filter
ArrayAdapter arrayAdapter1 =
new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
person_names);
final BaseAdapterFilter arrayAdapter2 =
new BaseAdapterFilter(this, persons);
listView1.setAdapter(arrayAdapter1);
listView1.setTextFilterEnabled(true);//关键代码
//listView2放置baseAdapter,baseAdapter没有自带的过滤功能,
// 需要在adapter中实现过滤功能
listView2.setAdapter(arrayAdapter2);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence,
int i, int i1, int i2) {
}
///注册编辑框文本发生变化时的监听方法
@Override
public void onTextChanged(CharSequence charSequence,
int i, int i1, int i2) {
String key = charSequence.toString();
if (TextUtils.isEmpty(key)) {
listView1.clearTextFilter();
} else {
listView1.setFilterText(key);
}
arrayAdapter2.getFilter().filter(charSequence);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
//初始化数据源
public void initData() {
person_names = new String[]{"张三",
"曹操", "王二", "张飞", "赵云", "刘备"};
persons = new ArrayList<Person>();
Person person = new Person("张三", 20, "1001");
persons.add(person);
person = new Person("李四", 21, "1002");
persons.add(person);
person = new Person("王二", 22, "1003");
persons.add(person);
person = new Person("张飞", 23, "1004");
persons.add(person);
person = new Person("赵云", 24, "1005");
persons.add(person);
person = new Person("马岱", 25, "1006");
persons.add(person);
}
}
Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:http://android.myapp.com/myapp/detail.htm?apkName=com.shandong.mm.androidstudy,源码例子文档一网打尽。
分享到:
相关推荐
`Filterable`接口则使得`ListView`能够根据用户的搜索条件动态过滤数据,从而实时更新显示内容。下面将详细讲解这三个知识点。 1. **SearchView** `SearchView`是Android中的一个可扩展视图,通常放置于Action Bar...
- 在适配器中实现`getFilter()`方法,返回一个过滤器实例,该过滤器将处理用户输入的字符,并更新ListView显示的数据。 - 在适配器的`bindView()`方法中,使用AlphabetIndexer的`getSectionForPosition(int ...
在某些场景下,我们可能需要为ListView添加过滤功能,以便用户可以根据输入的关键字实时筛选显示的数据。在本教程中,我们将探讨如何实现一个基于BaseAdapter而非ArrayAdapter的ListView过滤功能。 首先,理解...
- 要在ListView中实现过滤功能,可以使用过滤器Filter接口。首先,Adapter需要实现Filterable接口,并提供filter方法来过滤数据。 - 用户输入的搜索关键字通过Filter的publishResults方法传递给Adapter,Adapter再...
本项目主要涉及了ListView的高级用法,包括A-Z字母排序以及过滤搜索功能,这在处理如联系人信息等大量可分类数据时非常实用。下面我们将详细探讨这两个关键知识点。 1. **A-Z字母排序**: 在Android中,实现...
本教程将深入探讨如何实现ListView的字母排序和过滤搜索功能,以创建类似通讯录的效果。我们参考的项目是"SortedContactUI-master",它展示了如何实现这一第四种效果。 首先,理解ListView的基本原理至关重要。...
4. **实时搜索**:当用户在SearchView中输入时,监听其`onQueryTextChange()`事件,调用Filter的`filter()`方法进行过滤操作,然后刷新ListView。 **三、完整实例** 1. 首先,创建一个自定义的ArrayAdapter,实现...
在MVVM(Model-View-ViewModel)架构下对WPF(Windows Presentation Foundation)ListView进行排序和过滤是一项常见的任务,尤其在构建数据驱动的应用程序时。MVVM是一种设计模式,它将用户界面(View)、业务逻辑...
如果`ListView`的适配器实现了`Filterable`接口,我们可以直接调用`getFilter()`方法进行过滤操作。 ```java adapter.getFilter().filter(searchText); ``` ### 3. 实现`Filterable`接口 为了让`ListView`的...
在这个特定的案例中,我们关注的是ListView的两种增强功能:字母排序(Alphabetical Indexing)和过滤搜索(Filter Search)。这两种特性使得用户能够更方便地浏览和查找列表中的项目。 首先,让我们详细了解一下...
这里涉及到过滤(Filter)的概念,可以通过对Adapter的数据集进行过滤,只保留包含搜索关键词的项。例如,可以创建一个自定义的ArrayAdapter,并实现Filterable接口: ```java public class CustomArrayAdapter ...
这里可能需要用到Filterable接口,通过实现filter()方法来处理过滤逻辑。过滤后,我们可以通过ListView的notifyDataSetChanged()方法通知ListView数据已改变,使其自动刷新显示。 至于标签"拼音",意味着我们要关注...
适配器的`getFilter()`方法返回一个过滤器对象,该对象负责执行实际的过滤操作。过滤器的`performFiltering()`方法根据输入的关键字过滤数据,然后在`publishResults()`方法中通知ListView更新视图。 在提供的文件...
"ListView字母快速索引 自动过滤搜索"这个主题涉及到两个重要的功能:字母快速索引(Section Indexer)和自动过滤搜索(Search Filter)。这两者都是提高用户体验的重要手段。 首先,我们来看一下字母快速索引。在...
当搜索框中的内容改变时,我们需要根据新的搜索条件,调用Adapter的`getFilter().filter()`方法来过滤数据源,并通知ListView刷新视图。 4. **自定义过滤器**:如果默认的过滤器无法满足需求,可以自定义Filter实现...
可以使用Java的`filter()`方法或者遍历整个数据集,根据关键字匹配数据项,生成新的过滤后的列表。 3. 更新ListView:使用过滤后的列表重新填充Adapter,并调用`notifyDataSetChanged()`通知ListView数据已更新。 ...
3. 实时更新:筛选后,同样需要更新Adapter,以便ListView显示过滤后的结果。 四、优化性能 1. 使用ViewHolder模式:为了提高ListView的滚动性能,可以使用ViewHolder模式来缓存视图的子组件,减少findViewById()的...
在该方法内,调用适配器的`getFilter().filter(text)`方法执行过滤。 4. **优化性能**:为了提高性能,可以在过滤过程中使用线程池或者异步处理,避免UI线程阻塞。 5. **自定义过滤规则**:根据业务需求,你可以...
当ListView的ItemsSource是ICollectionView时,可以通过调用其SortDescriptions和Filter方法来实现排序和过滤。 - **SortDescriptions对象**:ICollectionView的SortDescriptions属性是一个SortDescription集合,...
1. **创建自定义过滤器**:为了根据用户的搜索关键词过滤`ListView`的数据,我们需要创建一个实现了`Filterable`接口的适配器。例如,如果你使用的是`ArrayAdapter`,可以重写`getFilter`方法: ```java private ...