android 控件 弹框+ 搜索框

dialog+ SearchView + ListView

1.效果:


image.png

1.一个searchView+ListView 视图:#R(dialog_search.xml)

 

    

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

你可能感兴趣的:(android 控件 弹框+ 搜索框)