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

Android EditText字段不允许用户在ListView中输入

是因为ListView默认会将焦点交给其子项,而EditText是可以接收用户输入的控件。为了禁止用户在ListView中输入,可以通过以下两种方式实现:

  1. 在ListView的适配器中,为每个EditText设置一个TextWatcher监听器,当用户输入时,立即清空EditText的内容。这样用户输入的内容就会被清空,达到禁止输入的效果。
代码语言:java
复制
public class MyAdapter extends BaseAdapter {
    private List<String> data;
    private LayoutInflater inflater;

    public MyAdapter(Context context, List<String> data) {
        this.data = data;
        inflater = LayoutInflater.from(context);
    }

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

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.editText = convertView.findViewById(R.id.editText);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.editText.setText(data.get(position));
        holder.editText.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) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                // 清空EditText的内容
                data.set(position, "");
            }
        });

        return convertView;
    }

    private static class ViewHolder {
        EditText editText;
    }
}
  1. 在ListView的适配器中,为每个EditText设置一个OnTouchListener触摸监听器,当用户触摸EditText时,返回true,表示已经处理了触摸事件,不再将焦点交给EditText,从而禁止用户输入。
代码语言:java
复制
public class MyAdapter extends BaseAdapter {
    private List<String> data;
    private LayoutInflater inflater;

    public MyAdapter(Context context, List<String> data) {
        this.data = data;
        inflater = LayoutInflater.from(context);
    }

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

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.editText = convertView.findViewById(R.id.editText);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.editText.setText(data.get(position));
        holder.editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // 返回true表示已经处理了触摸事件,不再将焦点交给EditText
                return true;
            }
        });

        return convertView;
    }

    private static class ViewHolder {
        EditText editText;
    }
}

以上两种方式都可以实现在ListView中禁止用户输入EditText的效果。在实际应用中,可以根据具体需求选择合适的方式。

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

相关·内容

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

前言 Android开发中,类似下图的搜索功能非常常见 ? 今天,我将手把手教大家实现一款 封装了 历史搜索记录功能 & 样式 的Android 自定义搜索框 开源库,希望你们会喜欢。 ?...需求场景 在开始coding前, 理解好用户的需求场景 有助于我们更好地设计 & 实现功能 需求场景如下 ? ---- 3. 业务流程图 根据场景,梳理出来的功能业务流程图如下: ? ---- 4....功能详细设计 下面将给出详细的功能逻辑 6.1 关键字搜索 描述:根据用户输入的搜索字段进行结果搜索 原型图 注:关键字搜索功能是因人而异的,所以本源码仅留出接口供开发者实现,不作具体实现 ?...)监听 * 即当用户点击搜索历史里的字段后,会直接将结果当作搜索字段进行搜索 */ listView.setOnItemClickListener(new AdapterView.OnItemClickListener...} else { tv_clear.setVisibility(INVISIBLE); }; } 6.4 保存历史搜索记录 描述:将用户输入的搜索字段保存到数据库中

3K10
  • 【Android 应用开发】Android 数据存储 之 SQLite数据库详解

    , 数据库表中不允许插入一行空的数据, 插入数据至少有一列不为null才能插入, 如果后面的values是null, 并且不知道列的名称, 那么插入操作会失败, 为了避免这种情况, 就出现了本参数, 为了防止..., 没有严格的某个字段 必须存放某个类型的数据这样的限制, 因此创建数据库 和 插入数据的时候不用关心这个列的数据类型; -- eg: 在SQLite中可以将字符串数据放到整型字段中, 但是主键id,...context : 上下文对象; -- 参数② resource : ListView条目的布局; -- 参数③ cursor : 从数据库表中查询出来的记录; -- 参数④ string[]: 数据库中表的字段名称...SQLiteDatabase db; //数据库对象 private ListView listView; //列表 private EditText et_tittle; //输入的新闻标题 private...et_tittle; //输入新闻标题 private EditText et_content; //输入新闻内容 private ListView listView; //

    2.5K10

    基于Android Studio实现 购物商城APP (简单易上手)

    在sousuo方法中,设置了搜索按钮的点击事件,根据用户输入的关键词搜索相关商品并展示。在initListView方法中,初始化ListView,并加载商品数据。...同时,根据商品数据中的shoptype字段,动态创建TabLayout的Tab,并设置TabLayout的选择事件监听器,以根据选择的商品类别展示相应的商品列表。...在ListView的点击事件监听器中,根据点击的商品位置,将对应的Shop对象传递给DetailsActivity,并启动该活动。...在onCreateView方法中,它通过调用loadDataToListView方法来加载数据并将其设置到ListView上。...点击商品列表进入详情页:用户可以点击商品列表中的商品,查看其详细信。 4. 购物车功能: 商品数量的增加减少:允许用户在购物车中增加或减少商品的数量。

    1.3K11

    android之ListView的Adapter使用

    在做一个小练习的时候,又遇到了Adapter,才发现以前没有对它进行过记录 现在介绍一下: 其实Adapter就是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到ListView上面 Adapter...这里就以ArrayAdapter为例来介绍 我自己写的一个例子: 有两个类,一个是主界面Activity,用来处理输入和显示,效果图在最下面,可以翻到最后看一下,布局如下: 中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的数据,这个数据是以List的形式存在的,当然我们在设置的时候这个数组里面还没有数据...其实就是两个EditText和一个RadioGroup,用来采集输入的数据,然后存储到下面这个类里面: package apt.tutorial; public class Restaurant {...*/ listView = (ListView) findViewById(R.id.array_list); /* 我们要在listView上面显示的数据,放到一个数组中

    73010

    2014-10-31Android学习------SQLite数据库操作(四)-----数据库模块(二)增删改查实例展示

    ; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter...from:表中的数据列名的列表绑定到用户界面。意思就是把游标中那个列的数据绑定到界面中去 to:这些都应该是TextViews。...意思就是将游标中的数据显示在布局文件中哪些控件上,这个参数是控件的id号 flags:用于确定适配器的行为 其实这里我们也可以用前面讲到的SimpleAdapter去实现它,那就是参数不是游标数据...是表示键值 这里写的肯定就是在布局文件中的id的名称了,因为它必须跟后面的String[]相匹配的 然后再将map放入list里面不就行了,就成为data了么 参看前面的文章:http://blog.csdn.net...它说不要使用这个方法,你只需要申请一个新的游标,当这个新的游标值返回来的时候(当你定义的新的游标有值的时候),你就能够在异步更新视图列表中做到这一点(让数据库中最新的数据显示在列表中) 下面我们要思考为什么重复查询很危险

    60140

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

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

    67560

    笔记22 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(三)

    1.前言 整理学习”Android动画效果集合开源APP(BaseAnimation)程序源码“中的通讯录效果。...>笔记20 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(一) ---- 3.2 通讯录界面ListView的数据填充 加载联系人的方法容易理解,排序》加载》处理 >笔记...="@drawable/sorlistview_search_bar_icon_normal" android:hint="请输入关键字" android:singleLine...public void afterTextChanged(Editable s) { } }); /** * 根据输入框中的值来过滤数据并更新...* 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 * EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向没有考虑

    67440

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

    在翻页过程中,状态值变化依次为:正在滑动->滑动完毕->静止。 onPageScrolled : 在翻页过程中调用。...,true表示单行显示,false表示多行显示 在代码中对应的方法是: setCompletionHint : 设置下拉列表底部的提示文字  setThreshold : 设置至少输入多少个字符才会显示提示...比如弹出商品关键词列表时,往往还希望在每行后面显示该关键词对应的商品数量,从而让用户更有目的地选择合适的商品。...基于此,博主在下面又给出了基于EditText+ListView的实现方式,该方式除了在列表中显示关键词与数量外,还增加了一个叉号按钮用来立即清空文本框。...下面是EditText+ListView方式的效果图 ?

    1.1K10

    UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)

    UWP 中使用 WebView 时可以在网页中额外执行一些代码。于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情。 本文将介绍做法。...执行 JavaScript 代码 模拟用户输入 下面这一句的代码是填充用户 Id 一栏: await WebView.InvokeScriptAsync("eval", new[] { "document.getElementById...在 JavaScript 中,eval(string) 函数可计算某个字符串,并执行其中的的 JavaScript 代码。...在计算结束后,会返回一个字符串,就是参数中那个字符串执行完之后的返回值(如果有的话)。...模拟用户登录 完整的输入用户名、密码,并点击登录按钮的代码则是这样的: await LoginWebView.InvokeScriptAsync("eval", new[] { "document.getElementById

    2K30

    Android ORM 框架之 greenDAO

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。...这是其核心概念:为了在我们的 Android 工程中使用 greenDAO ,我们需要另建一个纯 Java Project,用于自动生成后继 Android 工程中需要使用到的 Bean、DAO、DaoMaster...在 ANDROID 工程中配置「GREENDAO GENERATOR」模块 在 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean...// 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。...,并赋予默认值 // 接下来你便可以设置表中的字段: note.addIdProperty(); note.addStringProperty("text

    1.2K60
    领券