dialog+ SearchView + ListView
1.效果:
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="請輸入搜索內(nèi)容" />
<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();
彈框顯示結(jié)果為:
3.為ListView配置數(shù)據(jù)
通過view 獲取SearchView册着、 ListView
SearchView searchView = (SearchView)view.findViewById(R.id.searchView);
ListView mListView = (ListView)view.findViewById(R.id.listView);
//設(shè)置該搜索框默認是否自動縮小為圖標(biāo)
searchView.setIconifiedByDefault(false);
//MainActivity.this :context listDate:數(shù)據(jù)源
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.select_dialog_item, listDate);
mListView.setAdapter(adapter);
//true表示listview獲得當(dāng)前焦點的時候扳躬,與相應(yīng)用戶輸入的匹配符進行比對,篩選出匹配的ListView的列表中的項
mListView.setTextFilterEnabled(true);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
// 當(dāng)點擊搜索按鈕時觸發(fā)該方法
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
// 當(dāng)搜索內(nèi)容改變時觸發(fā)該方法
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)){
//使用此方法搜索會出現(xiàn)一個黑色框框
//mListView.setFilterText(newText);
//未顯示效果采用下面方法 不會出現(xiàn)黑色框
adapter.getFilter().filter(newText);
}else{
//mListView.setFilterText(newText);
adapter.getFilter().filter("");
}
return false;
}
});
}
寫到 配上數(shù)據(jù)就能實現(xiàn)上述效果
如果想要為listView 添加點擊事件:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//xxxxxxxxxxxxx
}
});
如果直接通過position獲取listDate數(shù)據(jù)萌踱,(由于搜索框的過濾條件 整個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();
}
});