一个简单的ListView的筛选功能
筛选原理:获取Spinner所选的选项 然后对整个ListView列表进行循环判定 把不符合选项的列删除,重新筛选其他选项的时候 重新获取一下初始列表 再进行筛选。(自己突发奇想的小方法,可能不是最好的,但贵在功能可以实现且方法简单方便理解)。
效果图
xml文件 (一个Spinner 和 一个ListView)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="50dp"
android:layout_height="match_parent">
<Spinner
android:entries="@array/saixuan"
android:popupBackground="#00BCD4"
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</Spinner>
<ListView
android:id="@+id/lv4"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
java(这里就不把listview的使用放上来了,只提供筛选功能的代码块)
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
data.clear(); //防止出现列表数据叠加的情况
indatas(); //每次筛选前先重新获取一遍数据(方法里面是listview上传列表数据的代码)
myAdapter.notifyDataSetChanged(); //列表更新
String str=spinner.getSelectedItem().toString(); //获取所需要筛选出来的类型
if (!str.equals("全部")){ // 全部 时不进行筛选
for (int a=0;a<data.size();a++){ //对列表每列都进行对比
if (!data.get(a).getTxv().equals(str)){ //当列表与选项不符合时
data.remove(a); //移除当前列
a--; //每次执行删除一个 size 都要减少 1 (因为列表中减少了一列)
}
myAdapter.notifyDataSetChanged(); //每次删除后更新列表
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) { }
});
同理这个可以应用到按钮的点击事件上,代码基本上是一摸一样的,把spinner的点击事件换成button的点击事件即可!