dialog+ SearchView + ListView
1.效果:
image.png
1.一个searchView+ListView 视图:#R(dialog_search.xml)
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="请输入搜索内容" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
2.添加dialog
Dialog dialog = new Dialog(this);
LayoutInflater inflater=getLayoutInflater();
final View view=inflater.inflate(R.layout.dialog_search, null);
dialog.setContentView(view);
dialog.show();
弹框显示结果为:
image.png
3.为ListView配置数据
通过view 获取SearchView、 ListView
SearchView searchView = (SearchView)view.findViewById(R.id.searchView);
ListView mListView = (ListView)view.findViewById(R.id.listView);
//设置该搜索框默认是否自动缩小为图标
searchView.setIconifiedByDefault(false);
//MainActivity.this :context listDate:数据源
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.select_dialog_item, listDate);
mListView.setAdapter(adapter);
//true表示listview获得当前焦点的时候,与相应用户输入的匹配符进行比对,筛选出匹配的ListView的列表中的项
mListView.setTextFilterEnabled(true);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
// 当点击搜索按钮时触发该方法
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
// 当搜索内容改变时触发该方法
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)){
//使用此方法搜索会出现一个黑色框框
//mListView.setFilterText(newText);
//未显示效果采用下面方法 不会出现黑色框
adapter.getFilter().filter(newText);
}else{
//mListView.setFilterText(newText);
adapter.getFilter().filter("");
}
return false;
}
});
}
写到 配上数据就能实现上述效果
image.png
如果想要为listView 添加点击事件:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//xxxxxxxxxxxxx
}
});
如果直接通过position获取listDate数据,(由于搜索框的过滤条件 整个position的范围实际上是缩小过了 很难通过listDate获取选中的值)
可以通过适配器获取选中的值
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = (String)adapter.getItem(position);
//xxxxxxxxxxxx 其他操作
dialog.dismiss();
}
});
网友评论