最近工作上遇到一些问题,recyclerview中嵌套一个recyclerview,这内部的recyclerview的item布局中有EditText,需要输入数据,最关键的是在内部输入后,需要在外部这个recyclerview上进行展示,我一开始想的是不行我就修改后刷新数据源,但是在我填写的时候,他每次都会重新加载数据源,这体验就不是很好,整了我一个周末,没弄明白,今天周一,来公司问了问我们公司的大佬,人家说用监听回掉就可以,我一脸懵逼,然后人家给了我一套代码,我去。真好用,接下来直接上代码块
var callback:((Int)->Unit)?= null
这个是在内部的recyclerview的适配器中声明的一个回掉方法
val watcher = object : TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(v: Editable?) {
if (v!= null && v.toString()!= "" ){
item?.boxNumber = v.toString().toInt()
var count=0
for (i in (lengthF-1) until data.size){
count+=data[i]?.boxNumber?:0
}
callback?.invoke(count)
}
}
}
这个是输入框的监听事件,需要咱们创建出来
if(edit.tag!=null){
edit.removeTextChangedListener(edit.tag as TextWatcher)
}
edit.addTextChangedListener(watcher)
edit.tag = watcher
这块代码是因为是在适配器中写的,可能会有多个item,需要我们手动去除监听事件,否则就可能会出现数据错乱
主要代码就这么多,具体在外部适配器中调用请看下图
salesEstimateWeekAdapter.callback ={ it->
}
这个it->其实是他自带的,我在这是写出来,让大家看的清楚这个,接下来就在这个callback中进行数据渲染就可以了,语言可能不太通畅,如果大家有需要的,评论留言都可以,我看到了,第一时间会给大家回答的