首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使ListView在经过TextWatcher过滤后可点击

ListView是Android开发中常用的列表控件,用于展示大量数据。当需要对ListView进行过滤操作时,可以通过TextWatcher来监听搜索框的文本变化,并根据输入的关键字对ListView的数据进行过滤,使得只显示符合条件的数据项。

要使ListView在经过TextWatcher过滤后可点击,可以按照以下步骤进行操作:

  1. 创建一个自定义的Adapter类,继承自BaseAdapter或其子类,用于管理ListView的数据和视图。
  2. 在Adapter中添加一个方法,用于设置过滤后的数据集合。该方法会接收一个关键字作为参数,并根据关键字对原始数据进行过滤,得到符合条件的数据集合。
  3. 在Adapter的getView()方法中,根据过滤后的数据集合来获取对应位置的数据,并将数据绑定到列表项的视图中。
  4. 在Activity或Fragment中,创建一个TextWatcher对象,并在其onTextChanged()方法中调用Adapter的过滤方法,将过滤后的数据集合设置给Adapter。
  5. 将过滤后的Adapter设置给ListView,即可实现ListView在经过TextWatcher过滤后可点击的效果。

下面是一个示例代码:

代码语言:txt
复制
public class CustomAdapter extends BaseAdapter {
    private List<String> originalData; // 原始数据
    private List<String> filteredData; // 过滤后的数据

    public CustomAdapter(List<String> data) {
        originalData = data;
        filteredData = new ArrayList<>(data);
    }

    public void filter(String keyword) {
        filteredData.clear();
        for (String item : originalData) {
            if (item.contains(keyword)) {
                filteredData.add(item);
            }
        }
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return filteredData.size();
    }

    @Override
    public Object getItem(int position) {
        return filteredData.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 根据position获取数据,并将数据绑定到列表项的视图中
        // ...
        return convertView;
    }
}

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private EditText searchEditText;
    private CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);
        searchEditText = findViewById(R.id.searchEditText);

        List<String> data = new ArrayList<>();
        // 初始化数据

        adapter = new CustomAdapter(data);
        listView.setAdapter(adapter);

        searchEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String keyword = s.toString();
                adapter.filter(keyword);
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }
}

在上述示例中,CustomAdapter是自定义的Adapter类,其中filter()方法用于过滤数据。MainActivity是示例的主界面,其中的ListView和EditText分别对应布局文件中的ListView和EditText控件。通过TextWatcher监听EditText的文本变化,并在onTextChanged()方法中调用CustomAdapter的filter()方法进行过滤操作。

这样,当用户在EditText中输入关键字时,ListView会根据关键字进行过滤,并显示符合条件的数据项。用户可以点击ListView中的项进行相应的操作。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(四十四)动态UI事件

onPageSelected : 页面选择时调用,该方法用得较多。位置参数表示当前页面的序号。 翻页事件的具体实现代码参考《Android开发笔记(二十一)横幅轮播页Banner》。...文本变化事件 文本变化事件,主要用于EditText控件,包括继承自EditText的AutoCompleteTextView控件,监控文本变化前、变化中、变化等行为。...onTextChanged : 文本变化中调用。 afterTextChanged : 文本变化调用,该方法用得较多。...,自动弹出历史搜索关键词下拉列表; 2、点击下拉列表的某项,文本框自动填入该项的关键词文本; 3、点击搜索按钮,主页面通过回调获得搜索关键词,从而能够做进一步的处理; 下面是AutoCompleteTextView...基于此,博主在下面又给出了基于EditText+ListView的实现方式,该方式除了列表中显示关键词与数量外,还增加了一个叉号按钮用来立即清空文本框。

1.1K10

RxBinding使用和源码解析

RxBinding这个库是 JakeWharton的大作,可以响应式的方式来处理UI的响应问题,比如按钮的点击事件,ListView点击事件,EditText的文本变化事件等等。...分成下面几部分内容: 1.表单验证 2.按钮点击分发多个事件 3.ListView点击事件 4.源码解析 写了个简单的Demo,先看下效果: ?...,如果输入的名字"RxBind",密码"123",就会在subscribe中接收到aBoolean==true,然后我们使能按钮,RxView.clicks这个可以先忽略,我们第二部分进行详细说明。...这里写了个简单的ListView,通过RxAdapterView.itemClicks(mListView)封装了一个Observable,就可以点击的时候进行回调了。...再看下ListView点击的源码。 4.3 ListView点击源码分析 直接上源码,看出来了吧?

1.3K100

android实现搜索功能并将搜索结果保存到SQLite中(实例代码)

涉及要点: ListView+EditText+ScrollView实现搜索效果显示 监听软键盘回车执行搜索 使用TextWatcher( )实时筛选 将搜索内容存储到SQLite中(清空历史记录)...v) { deleteData(); queryData(""); } }); et_search.setOnKeyListener(new View.OnKeyListener() {// 输入完按键盘上的搜索键...hideSoftInputFromWindow( getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); // 按完搜索键将当前查询的关键字保存起来...insertData(et_search.getText().toString().trim()); queryData(""); } Toast.makeText(MainActivity.this, "点击软键盘搜索...市区焦点 scrollView.setVisibility(View.GONE); } } }); // 搜索框的文本变化实时监听 et_search.addTextChangedListener(new TextWatcher

94230

Android开源库:手把手教你实现一个简单好用的搜索框(含历史搜索记录)

bCallBack.java 点击返回按键的接口回调方法 SearchListView.java 解决ListView & ScrollView的嵌套冲突 search_layout.xml 搜索框的布局...clearDrawable : null, null); } /** * 步骤4:对删除图标区域设置点击事件,即"点击 = 清空搜索框内容" * 原理:当手指抬起的位置删除图标的区域...switch (event.getAction()) { // 原理:当手指抬起的位置删除图标的区域,即视为点击了删除图标 = 清空搜索框内容 case...)监听 * 即当用户点击搜索历史里的字段,会直接将结果当作搜索字段进行搜索 */ listView.setOnItemClickListener(new AdapterView.OnItemClickListener...点击搜索键,对该搜索字段在数据库是否存在进行检查(查询)->> 关注3 boolean hasData = hasData(et_search.getText(

2.7K10

Android自定义View实现搜索框(SearchView)功能

adapter) { this.mAutoCompleteAdapter = adapter; } private class EditChangedListener implements TextWatcher...* search view回调方法 */ public interface SearchViewListener { /** * 更新自动补全内容 * * @param text 传入补全的文本...代码不多,实现很简单,主要是需要给EditText(输入框)设置点击监听和文本改变监听,有以下几点: 1. 当输入框没有文本时,点击输入框,显示热门搜索列表框。 2....考虑到实际开发中,数据量十分庞大,可以只把结果集的一部分(如前10个)显示出来,上拉到底的时候再加载之后的记录,也就是可以加入上拉加载的机制,使app性能更优化。 自动补全匹配也是采用相同的算法。...各位看官如果有任何问题评论或者发邮件跟我联系yetwish@gmail.com 囧~忘记贴代码了,代码放在github上,各位看官直接download即可 链接:https://github.com

4.5K10

RxBinding详解: 规范而强大的安卓UI响应式编程

一段时间,你的fragment或者activity中由于各种匿名类而显得十分混乱。这时,如果你想再为该类中控件/视图添加由其它视图触发的响应事件,那将变得非常复杂。...传统Android中,我们必须实现整个TextWatcher才行,这会多出许多行没必要的代码,因为你还得实现beforeTextChanged方法与 afterTextChanged方法。...必须注意到前面的例子中使用RxBinding只是简单实现了TextWatcher的onTextChanged方法。下面我们来看看如何用RxBinding完全实现TextWatcher。...subscriber.onNext(view.getText()); } } 这语法糖真的很棒,超越了Android现成的API,使你的代码可读性更高。... context 中使用 share 允许对同一个button点击事件的多次监听,简直太强大了。 RxBinding 癖好与安装 使用RxBinding时需要注意一些地方。

2.9K40

Android开发之那些好用的数据结构与API(二)

Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我项目中用到的好用的但是不是人人都知道的东东 ~~ 1、android...:digits Android开发中,经常要设置EditText为密码显示,但是通常要求密码只能是 **字母和数字 . _ **的组合,此时就可以用该属性进行过滤 <EditText...setKeyListener.gif 3、ListView 的 setEmptyView 该方法可以为没有数据的ListView 设置一个提示View,常常用在ListView没有加载到数据或加载数据失败时提示...setEmptyView.png 注意 经过本人测试,如果ListView包含在某些下拉刷新框架中,这样做是没有效果的,应该是冲突了。...,直接点击按钮 ?

66560

android之编辑框限定范围

然后,如果你要设置数值的大小范围或者字符串的长度范围,那就需要我们代码里面设置了,我们需要为EditText添加TextWatcher监听器,该监听器最重要的方法就是afterTextChanged,...这个是在用户点击软键盘触发的,我们需要在这里写上我们需要限定的范围,如下面的代码就是限定用户输入的数字不能超过100 questionNumEditText.addTextChangedListener...(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count...s.replace(0, s.length(), "100"); else return; } }); 最后,如果我们想改变弹出的软键盘右下角按钮的名称,可以IME... ,软键盘下方变成“完成”,点击光标保持原来的输入框上,并且软键盘关闭 image.png android:imeOptions="actionSend" 软键盘下方变成“发送”,点击光标移动下一个

1.6K30

基于 HTML5 Canvas 的工控机柜 U 位动态管理

之所以要规定服务器的尺寸,是为了使服务器保持适当的尺寸以便放在铁质或铝质的机架上。机架上有固定服务器的螺孔,以便它能与服务器的螺孔对上号,再用螺丝加以固定好,以方便安装每一部服务器所需要的空间。...,那么点击“添加机柜”就直接在树上选中的节点下生成 if (!...toolbar.add.rack'),// 用的是我们前面声明过的图片 toolTip: 'Add a rack',// 文字提示显示内容 action: function(){// 点击按钮触发的函数...列表组件过滤 ? 会不会有同学对列表栏顶部的 form 表单做过滤有些好奇?...这块代码非常简单,只需要对选中的类型进行过滤即可: listView.setVisibleFunc(function(data){// 设置可见过滤器 if (!

2.3K40

Android实现多级树形选择列表

Node * 过滤Node的代码很简单,遍历所有的Node,只要是根节点或者父节点是展开状态就添加返回 * * @param nodes * @return */ public static List<..., defaultExpandLevel, -1, -1); } /** * 相应ListView点击事件 展开或关闭某节点 * * @param position */ public void expandOrCollapse...指定刷新显示层级 * * @param index * @param mlists * @param defaultExpandLevel 默认展开几级列表 */ public void addData...mlists */ public void addData(List<Node mlists) { addData(mlists, defaultExpandLevel); } /** * 添加数据并刷新 指定刷新显示层级...@param node */ public void addData(Node node) { addData(node, defaultExpandLevel); } /** * 添加数据并刷新 指定刷新显示层级

3.3K30

Android Adapter里面嵌套ListView实例详解

Android Adapter里面嵌套ListView实例详解 前言: 嵌套~但是显示需要特殊处理下~以下是处理方法 前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个...又搜索了一下,发现有StackOverflow上的牛人已经解决了这个问题,经过试验发现是可以解决问题的,它的思路就是设置完ListView的Adapter,根据ListView的子项目重新计算ListView...listView.setLayoutParams(params); } } 只要在设置ListView的Adapter调用此静态方法即可让ListView正确的显示在其父...ScrollView中嵌套ListView(或者ScrollView)的另外一个问题就是,子ScrollView中无法滑动的(如果它没有显示完全的话),因为滑动事件会被父ScrollView吃掉,如果想要让子...比如好的设计是,父ListView的每个Item只显示概括性的描述,然后点击其Item会进入另外一个页面来详细描述和展示以及对这个Item的操作。

1.2K21

EditTextRecyclerView中的解决方案

问题2——错误的绑定机制 要想在EditText输入绑定数据,怎么搞?...原来是因为这里是addTextWatcher,而不是setTextWatcher,也就是复用的时候,同一个EditText添加了多个TextWatcher,怪不得分数9还能出现在上面了。...首先我是试了一个,removeTextWatcher的方法,那就是Adapter的detachViewHolderFromWindow方法中移除TextWatcher,如下: class PicAdapter...解决方案 经过思考,由于RecyclerView的复用机制,导致了以下关系的存在: 一个ViewHolder——>一个EditText——>多个TextWatcher——>多个PicItem 这里我们可以将多个...TextWatcher始终绑定一个,那就需要在ViewHolder的初始化里面操作,而不是updateView,因为会多次bind,这就得到了以下关系: 一个ViewHolder——>一个EditText

2.7K20

优先使用 KTX 库 | MAD Skills

Kotlin 中使用 Android 的 Java API 时,您会迅速意识到这样的做法失去了 Kotlin 语言简单有趣的特点。...如果您比较喜欢观看视频,可以 点击这里。 可发现性 为了提高 ktx 功能的可发现性,作为最佳实践,当某个 ktx 库可用时,总是导入并使用它。...core-ktx 创建了 TextWatcher 中对应的方法: doOnTextChanged、doAfterTextChanged 以及 doBeforeTextChanged, Kotlin 中...editWordView.doOnTextChanged { text, start, count, after -> handleTextChanged(text) } 这样的变化会带来许多好处: 代码更加简洁,更好的命名和空类型的注释...使用 viewModelScope ,您不需要实现 CoroutineScope,协程任务的取消会在 viewModel.onCleared() 函数中自动执行。

1.1K30

详解EditText输入监听TextWatcher「建议收藏」

: 输入一个字符:s替换执行此方法,所以可以读取到字符串“你”; 开始处0:下标位,接下来不说了这个。...(这个方法没有告诉你哪里改变了,或许其他afterTextChanged()可能已经改变它了并使这个改变失效,但是如果你确定知道他是否起作用了,你可以onTextChanged()里调用setSpan...所以这个方法是在你输入完才调用的,你输入一个字符,然后以后是不是一直处于输入完成状态,所以他一直调用这个方法。...总结 一般我们onTextChanged();方法里做一些自己要做的事,比如监听输入的字符长度,或者应用在验证输入一个手机号就设置按钮可点击等等。...我们做自己的操作一般在这里; afterTextChanged();在你输入完成执行,我们输入完处于完成状态,他就监测到完成了就不断的执行,因为我们不操作,是不是一直处于完成状态?

2.8K31
领券