BindingListAdapter icon indicating copy to clipboard operation
BindingListAdapter copied to clipboard

局部刷新

Open jpsz01 opened this issue 5 years ago • 3 comments

大佬,对列表中的其中一项里的某个字段或者某几个字段进行局部刷新,请问有比较好的实现方式吗?整项刷新的话导致画面闪烁,不是太美观

jpsz01 avatar May 22 '19 09:05 jpsz01

很简单的,用DataBinding的ObservableField可以完美达到你的要求

ditclear avatar May 22 '19 13:05 ditclear

具体操作就是

// ItemViewModel
class ItemViewModel{
    
    val text = ObservableField<String>("")
}

//item.xml
<layout>
	<variable value="item" type="ItemViewModel"/>
	
	<LinearLayout>

		
		<TextView

		android:text="@{item.text}"/>

	</LinearLayout>
</layout>


// activity
class TestActivity extends AppCompactActivity{
    val list = arrlistof<ItemViewModel>()
    val mAdapter by lazy {
        SingleTypeAdapter(mContext,R.layout.item,list)
    }
	
    onCreate(){
		mBinding.recyclerView.adapter = mAdapter
    }

    
    //当需要改变一行中的数据或者某个字段的时候
    // 通过index :位置 找到相应的ItemViewModel
    fun change(index:int){
        //通过ObservableField调用set方法直接就可以更新UI了
        list[index].text.set("new Text")
    }
    
}

ditclear avatar May 22 '19 13:05 ditclear

相关原理:https://mp.weixin.qq.com/s/b6bekB39rLaYd_9wfVXZRw

ditclear avatar Jun 06 '19 08:06 ditclear