MVVM-Architecture-Android icon indicating copy to clipboard operation
MVVM-Architecture-Android copied to clipboard

How to use MVVM for Recycleview loadmore action

Open est7 opened this issue 1 year ago • 2 comments

Thank you for your article. I would like to know, according to Android Official Guide of Unidirectional Data Flow, should I call uiState.Success(newAllList) when I pull more data, or add a new state: uiState.SuccessLoadMore(appendList)?

In the first case, I need to use DiffUtil ,If I have a large list but only want to append 20 pieces of data to it, is it not worth the loss? I prefer to use the second method and then call adapter.notifyItemRangeInserted(). I am very confused about this. How do you recommend I do it? Thank you very much for your answer.

est7 avatar Aug 18 '23 05:08 est7

It is not worth using DiffUtil if you have a huge list but just want to append 20 bits of data to it. To update the adapter in this scenario, just use the notifyItemRangeInserted() function.

If you are often adding data to the list, though, DiffUtil may be a better solution. This is due to DiffUtil's efficiency over manually changing the adapter.

Finally, if you are simply infrequently adding data to the list, the notifyItemRangeInserted() function should suffice. If you are often adding data to the list, though, DiffUtil may be a better solution.

07NG avatar Aug 29 '23 17:08 07NG

@07NG I prefer using the notify method, but now we promote using a single data source. In order to drive the UI display, I should hold this single data source in the viewmodel. If I want to perform an action like uistate.copy(list = list + appendlist), then I cannot use the 'notify' method. This notify method resembles the code smell of imperative programming.

est7 avatar Aug 30 '23 08:08 est7