美文网首页
android 控件 弹框+ 搜索框

android 控件 弹框+ 搜索框

作者: 打死也不加班 | 来源:发表于2018-08-22 11:09 被阅读0次

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

    相关文章

      网友评论

          本文标题:android 控件 弹框+ 搜索框

          本文链接:https://www.haomeiwen.com/subject/mekriftx.html