美文网首页
android 搜索框 添加事件

android 搜索框 添加事件

作者: 打死也不加班 | 来源:发表于2018-08-30 15:04 被阅读0次
image.png

为listView 添加点击事件:

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                   //xxxxxxxxxxxxx
            }
        });

这边会有问题 通过position获取数据时,由于 搜索框的过滤条件 整个position的范围实际是缩小过了 很难通过position获取选中的值

这边通过适配器获取选中的值

 
 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                   String item = (String)arrayAdapter.getItem(position);
                   //将值填到对应的控件去
                   //TextView.setText(item);
                   dialog.dismiss();
            }
        });

数据只是简单的String,如果要实现ListView更复杂的功能。
这边需要自定义适配器:
适配器需要重写 过滤方法 新建MyFilter 重写 过滤方法

public class SelectMultiChoicelAdapter extends ArrayAdapter<AffirmInfoBean.DataBean.UserListBean> {
        private Context mContext;
        private int mResource;
        private List<AffirmInfoBean.DataBean.UserListBean> mData;
        private MyFilter mFilter;
        ArrayList<AffirmInfoBean.DataBean.UserListBean> mOriginalValues;

        public SelectMultiChoicelAdapter(Context context, int resource, List<AffirmInfoBean.DataBean.UserListBean> objects) {
            //这里会将object赋值给父类的mObjects成员变量,问题的所在
            super(context, resource, objects);
            this.mContext = context;
            this.mResource = resource;
            this.mData = objects;
        }
        @Override
        public int getCount() {
            return mData.size();
        }
        @Nullable
        @Override
        public AffirmInfoBean.DataBean.UserListBean getItem(int position) {
            return mData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View view;
            if (convertView == null) {
                view = LayoutInflater.from(mContext).inflate(mResource, parent, false);
            } else {
                view = convertView;
            }
            CheckBox checkBox =(CheckBox) view.findViewById(R.id.cb_item);
            TextView text = (TextView) view.findViewById(R.id.tv_item);
            checkBox.setChecked(mData.get(position).getIsChecked());
            text.setText(mData.get(position).getText());
            return view;
        }

        @NonNull
        @Override
        public Filter getFilter() {
            if (mFilter == null) {
                mFilter = new MyFilter();
            }
            return mFilter;
        }

        private class MyFilter extends Filter {

            @Override
            //过滤数据
            protected FilterResults performFiltering(CharSequence constraint) {
                String filterString = constraint.toString().toLowerCase();
                FilterResults results = new FilterResults();

                //为null,表示没有赋值过,这里的逻辑是mOriginalValues保存原始数据,而mData保存过滤后的数据

                if (mOriginalValues == null) {
                    mOriginalValues = new ArrayList<>(mData);
                }

                if (TextUtils.isEmpty(filterString)) {
                    results.values = mOriginalValues;
                    results.count = mOriginalValues.size();
                } else {
                    List<AffirmInfoBean.DataBean.UserListBean> values = new ArrayList<>(mOriginalValues);
                    List<AffirmInfoBean.DataBean.UserListBean> newValues = new ArrayList<>();

                    for (int i = 0; i < values.size(); i++) {
                        AffirmInfoBean.DataBean.UserListBean value = values.get(i);
                        if (value.getText().contains(filterString)) {
                            newValues.add(value);
                        }
                    }
                    results.values = newValues;
                    results.count = newValues.size();
                }
                return results;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                //mData.clear();
                //mData.addAll((List<String>)results.values);
                //noinspection unchecked
                mData = (List<AffirmInfoBean.DataBean.UserListBean>) results.values;
                if (results.count > 0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        }
    }

相关文章

  • android 搜索框 添加事件

    为listView 添加点击事件: 这边会有问题 通过position获取数据时,由于 搜索框的过滤条件 整...

  • 点击当前页面搜索框跳转下个页面搜索框并且获取焦点

    当前页面搜索框回调处理事件跳转页面之前的搜索框代理 跳转之后搜索框页面处理 发现个问题,pop的时候添加两次会直接...

  • Javaweb-案例练习-2-给搜索框添加提示

    给搜索框添加搜索提示功能 这篇来利用Ajax做一个给搜索框添加搜索提示的功能,这个我们在百度首页,搜索框随便输入一...

  • fastadmin相关知识

    字段禁用搜索 绑定事件 自定义表单实现 多级联动 下拉框添加搜索功能 添加新的表格页面,需要初始化,不然即便获取到...

  • 第十周第一天笔记

    百度搜索框实例 思路:给input添加鼠标聚焦事件和键盘抬起事件;目的:获取数据,绑定数据判断:判断文本框中是否存...

  • 缓存数据框

    搜索列表框 + 操作列表数据源添加数据:1.添加搜索框输入数据2.搜索不到列表项才能添加3.删除搜索到的选中列表项

  • vue中禁止遮罩底层页面滑动

    方法一:在点击事件(弹出弹框)时,添加 在隐藏弹框时 方法二:在点击事件(弹出弹框)时,添加 在隐藏弹框方法中,添加

  • 学习HM微博项目第2天

    步骤:导航栏主题 -> 添加搜索框 -> 易混淆的属性 -> 自定义搜索框 -> 标题按钮 -> 弹出...

  • 一些简单的UISearchBar使用

    //添加搜索框 -(void)addsearchBar{ _search = [[UISearchBar a...

  • ios 添加搜索框

    UISearchBar * searchbar = [[UISearchBar alloc]initWithFra...

网友评论

      本文标题:android 搜索框 添加事件

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