EditText-RecyclerView

#列表中的item有EditText时填写、获取EditText中的值
在列表中的item中存在EditText控件,可以进行输入,还有保存功能等。
目前的问题是输入完毕后,列表滑动,EditText的值会改变,保存的话EditText的值是混乱的并且每次进入页面,软键盘会自动弹出,挡住列表的内容


为了实现这个效果,选择的控件是RecyclerView

实现滑动列表,而EditText的值不会改变需要在adapter中对EditText进行text的监听,每当text的值改变,数据源list中的值相应改变。这样无论列表如何滑动,EditText的值不会改变

addTextChangedListener(new TextWatcher() {//监听EditText的text变化
            @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) {
  				 mList.set(position, s.toString());//更新list的数据,防止rv滑动的时候重新绘制,数据还是之前的
            }
        });

列表一滑动,页面就会重新绘制,重新绘制列表会重新从数据源list中获取值,所以需要把数据源list的值修改为text的值,这样滑动不会改变text的值了。
还有个问题,RecyclerView中的item是采用复用的,每次滑动都会保存一遍list中的EditText的值。所以会出现数据混乱,需要在adapter中关闭复用

holder.setIsRecyclable(false);//不使用复用

在数据少的时候可以关闭复用;
若数据很多,再关闭复用,进入页面的时候,滑动页面的时候,页面绘制就会很长时间,变得卡,这种情况应该可以使用setTag、getTag对每个item进行标识。因为我司需求没有这个,所以只是提供个思路。。。。


进入页面,软键盘隐藏需在清单列表中所在的页面中添加这个属性

 android:windowSoftInputMode="adjustPan"

关于softInputMode官方API是这样介绍的:

Desired operating mode for any soft input area.任何软键盘输入区所需要的工作模式

  • SOFT_INPUT_STATE_UNSPECIFIED 软键盘默认模式,软键盘是否隐藏、显示没有指定,取决于其主题的设置

  • SOFT_INPUT_STATE_UNCHANGED 当主窗口出现在面前时,软键盘保持上次的状态(隐藏或显示)

  • SOFT_INPUT_STATE_HIDDEN 当选择该Activity时,软键盘隐藏;若一Activity跳到该Activity,该Activity被覆盖再显示出来时,软键盘保持默认设置

  • SOFT_INPUT_STATE_VISIBLE 当选择该Activity时,软键盘显示;若一Activity跳到该Activity,该Activity被覆盖再显示出来时,软键盘保持默认设置

  • SOFT_INPUT_STATE_ALWAYS_VISIBLE 当选择该Activity时,软键盘显示;若一Activity跳到该Activity,该Activity被覆盖再显示出来时,软键盘仍保持显示状态

  • SOFT_INPUT_ADJUST_UNSPECIFIED 软键盘默认模式,进入窗口时,自动选择一种模式,以显示布局视图滚动时,窗口调整大小在一块区域内可见

  • SOFT_INPUT_ADJUST_RESIZE 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间

  • SOFT_INPUT_ADJUST_PAN 该Activity主窗口不会调整屏幕的大小从而留出软键盘的空间,若布局视图滚动时,窗口不会被软键盘覆盖并且可以看到焦点内容

关于softInputMode的更多了解可以去查看API:

http://www.android-doc.com/reference/android/view/WindowManager.LayoutParams.html#softInputMode


Demo:https://github.com/PuppetZ/EditText-RecyclerView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值