This is the fourth day of my participation in the August More text Challenge. For details, see: August More Text Challenge

The problem

I used some simple magic to reduce the wealth of the big guys, and let’s see how Google did it.

We know that Recyclerview is a reuse mechanism, the general number of reuse is a screen more than the number, such as I here is 16.

By default, find the cause of the problem

Let’s look at the output from the listener without making any changes. Let’s look at the printed log. Let’s look at the listener code first:

input? .addTextChangedListener(object : TextWatcher {
    init {
        Log.i(TAG, "Holder init: -------------------------------")}override fun beforeTextChanged(s: CharSequence? ,start:Int,count: Int,after: Int) {}
    override fun onTextChanged(s: CharSequence? , start:Int, before: Int, count: Int) {
        Log.i(TAG, "onTextChanged ${d.name}: $s")}override fun afterTextChanged(s: Editable?).{}})Copy the code

Now let’s look at the initialization log:

I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -Copy the code

Now I scroll down to see the corresponding log output:

I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: OnTextChanged Jeff bezos: 618 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged elon musk: 602 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Bernard arnault and family: 595 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Bill Gates: 590 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mark zuckerberg: 553 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged warren buffett: 530 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry ellison: 519 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry page: 505 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged sergey brin: 499 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mukesh ambani: 484 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Oman theo ortega: 464 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged francoise DE ingrid, ancient meyers, and family: 464 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Zhong Shanshan: 454 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Steve ballmer: 451 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged ma: 441 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Jeff bezos: 418 I/Wu Jingyue: onTextChanged Alice Walton: 418 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged elon musk: 392 I/Wu Jingyue: onTextChanged Jim Walton: 392 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: Rob Walton: 390i/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Bill Gates: 382 I/Wu Jingyue: onTextChanged Michael bloomberg: 382 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mark zuckerberg: 377 I/Wu Jingyue: onTextChanged Huang Zheng: 377 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged warren buffett: 369 I/Wu Jingyue: onTextChanged Mackenzie Scott: 369 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry ellison: 356 I/Wu Jingyue: onTextChanged Daniel gilbert: 356 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry page: 351 I/Wu Jingyue: onTextChanged gautam adani and family: 351 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged sergey brin: 345 I/Wu Jingyue: onTextChanged phil knight and family: 345 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mukesh ambani: 345 I/Wu Jingyue: onTextChanged ma: 345 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Oman theo ortega: 337 I/Wu Jingyue: onTextChanged Charles Koch, 337 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged francoise DE ingrid, ancient meyers, and family: 335 I/Wu Jingyue: onTextChanged Julia Koch and family: 335 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged, carlos slim helu, and family: 330 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Steve ballmer: 320 I/Wu Jingyue: onTextChanged Michael dell: 320 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged ma: 317 I/Wu Jingyue: onTextChanged yanai and family: 317 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged francois pinault and family: 313 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Jeff bezos: 313 I/Wu Jingyue: onTextChanged Alice Walton: 313 I/Wu Jingyue: OnTextChanged and David Thompson, a family: 313 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged elon musk: 296 I/Wu Jingyue: onTextChanged Jim Walton: 296 I/Wu Jingyue: onTextChanged byatt hyster and small Karl albrecht: 296 I/Wu Jingyue: Holder init: -------------------------------Copy the code

Can see by default is only performed instantiation of the operation, and the listening text change is no, then I listen while on a scroll text triggered, in fact, I did not change the text, that is what will be like this, of course, was the result of for reuse, reuse so already assignment will be assignment, this time will trigger the text changes to monitor, And because each listener is used by more than one piece of data, the names of the wealth are different. We also find that TextWatcher is instantiated multiple times during the slide process, but it does not correspond to the number of data bars. We know that if the number of TextWatcher is the same as the number of data, we can solve the problem of data clutter. We try to make every data item a unique TextWatcher.

I created a new class:

class OwnTextWatcher(private val name: String): TextWatcher {
    init {
        Log.i(Adapter.TAG, "init name: $name-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --")}override fun beforeTextChanged(s: CharSequence? , start:Int, count: Int, after: Int) {}

    override fun onTextChanged(s: CharSequence? , start:Int, before: Int, count: Int) {
        Log.i(Adapter.TAG, "onTextChanged ${name}: $s")}override fun afterTextChanged(s: Editable?).{}}Copy the code

Initialize log:

I/Wu Jingyue: init name: Jeff bezos -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name:, elon musk, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Bernard arnault, and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Bill Gates -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Mark zuckerberg -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: warren buffett -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Larry ellison -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: larry page -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: sergey brin -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Init name: mukesh ambani -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Oman theo ortega -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Francoise Bettencourt Meyers and family -------------------Copy the code

This is just about the number of screens. Now look at the log output I swiped:

I/Wu Jingyue: init name: Zhong Shanshan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Steve ballmer -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: Ma -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: carlos slim helu, and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Jeff bezos: 618 I/Wu Jingyue: Init name: Alice Walton -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged elon musk: 602 I/Wu Jingyue: init name: Jim Walton -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Bernard arnault and family: 595 I/Wu Jingyue: init name: rob Walton -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Bill Gates: 590 I/ Wu Jingyue: Init name: Michael Bloomberg ------------------- I/ Wu Jingyue: 553 I/ Wu Jingyue: Init name: Huang Zheng -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged warren buffett: 530 I/Wu Jingyue: init name: Mackenzie Scott -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Larry Ellison: 519 I/ Wu Jingyue: init name: Daniel Gilbert ------------------- I/ Wu Jingyue: onTextChanged Larry Page: 505 I/ Wu Jingyue: Init name: gautam adani, and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged sergey brin: 499 I/Wu Jingyue: init name: Phil knight and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: init name: ma -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Oman theo ortega: 464 I/Wu Jingyue: Name: Charles Koch ------------------- I/ Wu Jingyue: onTextChanged Francois Bettencourt Meyers and family: 464 I/ Wu Jingyue: init name: Julia Koch and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Zhong Shanshan: 454 I/Wu Jingyue: init name: Mr. Son -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Steve Ballmer: 451 I/ Wu Jingyue: init name: Michael Dell ------------------- I/ Wu Jingyue: onTextChanged ma Huatong: 441 I/ Wu Jingyue: init name: Yanai and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged, carlos slim helu, and family: 423 I/Wu Jingyue: init name: Francois pinault and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged mukesh ambani: 418 I/Wu Jingyue: init name: and David Thompson, a family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Jim Walton: 392 I/ wU Jing Yu: init name: Beate Hester and Karl Albrecht Jr ------------------- I/ Wu Jingyuet: onTextChanged Jeff Bezos: 390 I/ Wu Jingyuet: onTextChanged Alice Walton: 390 I/ Wu Jingyuet: 390 I/ Bill Gates: 382 I/ Wu Jingyue: 382 I/ Wu Jingyue: onTextChanged Mark Zuckerberg: 377 I/ Wu Jingyue: 377 I/ Wu Jingyue: init name: ------------------- I/ Wu Jingyue: onTextChanged warren Buffett: 369 I/ Wu Jingyue: onTextChanged Mackenzie Scott: 369 I/ Wu Jingyue: init name: Dieter Schwartz ------------------- I/ Wu Jingyue: onTextChanged Larry Ellison: 356 I/ Wu Jingyue: onTextChanged Daniel Gilbert: 356 I/ Wu Jingyue: init name: ------------------- I/ Wu Jingyue: onTextChanged Larry Page: 351 I/ Wu Jingyue: onTextChanged Gortam Adani and family: 351 I/ Wu Jingyue: init name: Giovanni Ferrero ------------------- I/ Wu Jingyue: onTextChanged Sergey Brin: 345 I/ Wu Jingyue: onTextChanged Phil Knight and family: 345 I/ Wu Jingyue: init Name: Alan waite alzheimer's -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged ma: 345 I/Wu Jingyue: init name: Gerald waite alzheimer's -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: Amancio Ortega: 337 I/ Wu Jingyue: onTextChanged Charles Koch: 337 I/ Wu Jingyue: Init Name: Li Ka-shing ------------------- I/ Wu Jingyue: Francois Bettencourt Meyers and Her family: 335 I/ Wu Jingyue: onTextChanged Julia Koch and her family: 335 I/ Wu Jingyue: Init Name: Qin Yinglin ------------------- I/ Wu Jingyue: Zhong Zhenshan: 330I/WU Jingyue: onTextChanged SUN Zhengyi: 330I/WU Jingyue: INIT Name: DING Lei ------------------- I/ Wu Jingyue: Steve Ballmer: 320 I/ Wu Jing Yue: onTextChanged Michael Dell: 320 I/ Wu Jing Yue: Init Name: Ryan Blavatnik ------------------- I/ Wu Jing Yue: OnTextChanged Ma Huateng: 317 I/ Wu Jingyue: onTextChanged Yanai Tadashi and family: 317 I/ Wu Jingyue: init name: Li Shao-ji ------------------- I/ Wu Jingyue: Carlos Slim Helu and family: 313 I/ Wu Jingyue: onTextChanged Francois Pinault and family: 313 I/ Wu Jingyue: Init Name: Jacqueline Mars ------------------- I/ Wu Jingyue: onTextChanged Mukesh Ambani: 313 I/ Wu Jingyue: onTextChanged David Thomson and Family: 313 I/ Wu Jingyue: Init Name: John Mars -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged elon musk: 296 I/Wu Jingyue: onTextChanged Jim Walton: 296 I/Wu Jingyue: OnTextChanged byatt hyster and small Karl albrecht: 296 I/Wu Jingyue: init name: Yang and family -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --Copy the code

I checked the number of initializations, and it’s the same as the number of data, which means we did initialize that much, so why is this still happening? What we do know is that the input field’s node objects are not the same as the amount of data, but how much is reused, In fact, for a phone basically every time the same list is initialized, it instantiates the same or similar (I didn’t verify that). In this case, even though we have the same number of TextWatcher as the amount of data, since we only have a few EditTexts, it’s not practical to save that many TextWatcher at the same time. If we do, Only one EditText instance can hold more than one TextWatcher. Take a look at the source code for addTextChangedListener:

public void addTextChangedListener(TextWatcher watcher) {
    if (mListeners == null) {
        mListeners = new ArrayList<TextWatcher>();
    }

    mListeners.add(watcher);
}
Copy the code

We found that it was adding, not replacing, that one EditText could be used for multiple TextWatcher, so I wondered why it was designed this way. In fact, I think the reason is that there is a need for multiple listeners to listen for a change in text, which is a common need. We assume that if the place is only one listener, which is a one-to-one relationship, then we can realize the function we want here, the answer’s no, if so, then there will be only a few are effective, and when the back of the monitor instead of in front of the front cannot work at all.

To find the answers we want

Based on the previous analysis and understanding, we know the cause of this problem, and now our goal is to solve the problem.

We always only know a few instances, as long as the number to achieve the reuse, so will appear a one-to-many, actually in the case of reuse is we don’t want a one-to-many, after all, we changed a is a, in this case, just so we can try to make the amount of listening to the same number of instances EditText; We know that every recyclerView. ViewHolder instantiation will execute init, and there will always be the same number of recyclerView. ViewHolder, so we put the listening work in there. But then there’s a new problem, which is if there’s only one, how do you ensure that the data is one to one, and I think of a way to do that, because we know that every time the data is rendered it’s going to execute this function onBindViewHolder, so every time the data is going to change here, So I use a global variable to hold the data, and as soon as I execute onBindViewHolder, I update the data.

class Adapter: RecyclerView.Adapter<Adapter.Holder>() {
    companion object {
        const val TAG = "Wu Jingyue"
        private var currentData: Data? = null
    }
    var list: ArrayList<Data> = arrayListOf()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_test_adapter, parent, false)
        return Holder(view)
    }

    override fun onBindViewHolder(holder: Holder, position: Int) {
        holder.bind(list[position], position)
    }

    override fun getItemCount(a): Int = list.size

    inner class Holder(view: View): RecyclerView.ViewHolder(view) {
        private var text: TextView? = null
        private var input: EditText? = null
        init{ text = view.findViewById(R.id.titleText) input = view.findViewById(R.id.input) input? .addTextChangedListener(object : TextWatcher {
                init {
                    Log.i(TAG, "Holder init: -------------------------------")}override fun beforeTextChanged(s: CharSequence? ,start:Int,count: Int,after: Int) {}
                override fun onTextChanged(s: CharSequence? , start:Int, before: Int, count: Int) {
                    Log.i(TAG, "onTextChanged ${currentData? .name}: $s")}override fun afterTextChanged(s: Editable?).{}})}fun bind(d: Data, position: Int){ currentData = d text? .text = d.name input?.setText(d.wealth.toString()) } } }Copy the code

Here’s a look at the log output, when initialized:

I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Jeff bezos: 1770 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged elon musk: 1510 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Bernard arnault and family: 1500 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Bill Gates: 1240 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mark zuckerberg: 970 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged warren buffett: 960 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry ellison: 930 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged larry page: 915 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged sergey brin: 890 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged mukesh ambani: 845 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Oman theo ortega: 770 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged francoise DE ingrid, ancient meyers, and family: 736Copy the code

When we slide to the bottom of the log:

I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- I/Wu Jingyue: onTextChanged Zhong Shanshan: 689 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged Steve ballmer: 687 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged ma: 658 I/Wu Jingyue: Holder init: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged, carlos slim helu, and family: 628 I/Wu Jingyue: onTextChanged Alice Walton: 618 I/Wu Jingyue: Jim Walton: 602 I/ Wu Jingyue: onTextChanged Rob Walton: 595 I/ Wu Jingyue: onTextChanged 553 I/ wU jingyue: onTextChanged Daniel Gilbert: 519 I/ Wu Jingyue: onTextChanged -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - I/Wu Jingyue: onTextChanged gautam adani and family: 505 I/Wu Jingyue: onTextChanged phil knight and family: 499 I/Wu Jingyue: Ma: 484 I/ Wu Jingyue: onTextChanged Charles Koch: 464 I/ Wu Jingyue: onTextChanged 454 I/ Wu Jingyue: onTextChanged Michael Dell: 451 I/ Wu Jingyue: onTextChanged Franois Pinault: 441 I/ Wu Jingyue: onTextChanged David Thompson and his family: 418 I/ Wu Jingyue: onTextChanged Miliam Adelson: 382 I/ Wu Jingyue: 369 I/ Wu Jingyue: 377 I/ Wu Jingyue: 369 I/ Wu Jingyue: 377 I/ Wu Jingyue: 369 I/ Wu Jingyue: Giovanni Ferrero: 351i/Wu Jingyue: onTextChanged Alam Wertheimer: 345i/Wu Jingyue: Gerald Wertheimer: 345 I/ Wu Jingyue: onTextChanged Li Ka-shing: 337 I/ Wu Jingyue: 335 I/ Wu Jingyue: onTextChanged ding Lei: 330 I/ Wu Jingyue: onTextChanged Ryan Blavatnik: 320 I/ Wu Jingyue: onTextChanged Lee Shao-ki: 317 I/ Wu Jingyue: onTextChanged Jacqueline Mar: 313 I/ Wu Jingyue: John Mars: 313 I/ Wu Jingyue: onTextChanged Yang Huiyan and family: 296Copy the code

We found that we had achieved what we wanted