Я прочитал этот пост Когда вызывается onBindViewHolder и как он работает? и официальная документация, но я не нашел ответов на свой вопрос.
onBindViewHolder вызывается каждый раз, когда вам нужно связать данные, я помещаю журнал с переменной, которая увеличивается с каждым разом, когда он вызывается, и словом, с которым он должен связываться:
public class WordListAdapter extends RecyclerView.Adapter<WordListAdapter.WordViewHolder> {
int x;
...
@Override
public void onBindViewHolder(WordViewHolder holder, int position) {
WordItem current = mDB.query(position);
holder.wordItemView.setText(current.getWord());
Log.d("XLOGGIN", "word=" + current.getWord() + " " + "x=" + x);
x++;
}
...
}
это журнал:
Log before scroll
2019-04-26 10:15:18.064 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Adapter x=0
2019-04-26 10:15:18.150 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Android x=1
2019-04-26 10:15:18.213 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Android Performance x=2
2019-04-26 10:15:18.281 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Android Studio x=3
2019-04-26 10:15:18.346 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Androidx x=4
2019-04-26 10:15:18.410 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=AsyncTask x=5
2019-04-26 10:15:18.474 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=Data model x=6
Log after scroll
2019-04-26 10:15:36.979 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=ListView x=7
2019-04-26 10:15:37.059 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=OnClickListener x=8
2019-04-26 10:15:37.142 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=SQLOpenHelper x=9
2019-04-26 10:15:37.219 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=SQLiteDatabase x=10
2019-04-26 10:15:37.248 19001-19001/com.adc.wordlistsql D/XLOGGIN: word=ViewHolder x=11
onBindViewHolder вызывается RecyclerView, поэтому всякий раз, когда он должен связываться, он вызывается; как RecyclerView узнает, когда он больше не должен вызывать OnBindViewHolder, потому что больше нет данных для привязки? В моем коде я не нашел ничего, к чему можно отнести это поведение. В коде есть только запрос к базе данных и wordItemView setText.