Я запутался с ViewHolder. Я только начал преобразовывать все мои ArrayAdapters и ListView в RecyclerView с адаптерами и держателями.
При конвертации я зацикливаюсь на том, как я настраивал прослушиватели кликов.
В принципе, в прошлом я получал позицию, извлекал элемент в позиции pos и затем выполнял разметку элемента в зависимости от данных в элементе моего ArrayList.
@SuppressLint("ClickableViewAccessibility")
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_items, null, true);
Data currentData = (Data) getItem(position);
myTextView.setText(currentData.title);
myTextView.setOnClickListener(v->actionThatDependsOnPositionAndOrData());
}
Так что в моем ClickListener у меня будет что-то, что зависит от позиции, и какой-то обратный вызов, который обновляет ArrayList или что-то вроде этого.
Теперь, похоже, у меня больше нет возможности восстановить позицию.
@Override
public <T extends DownloadableData> void bindData(T data) {
super.bindData(data);
myTextView.setOnClickListener(v->actionThat????)
}
Так как мне указать позицию?
Потому что сейчас единственный способ, который я нашел в своей AsyncTask в clickListener - это вызвать фрагмент, имеющий RecyclerView, и сделать это
public void myCallback(Data data, String newTitle){
int index=allData.indexOf(data);
performModificationOfData(data); //like data.title=newTitle;
allData.set(index, data);
adapter.notifyDataSetChanged(); //not even sure this is needed..
}
Разве нет более разумного способа сделать это?