Существует два варианта операций с поперечными потоками.
Control.InvokeRequired Property
, а второй - использовать
SynchronizationContext Post Method
Control.InvokeRequired полезен только при работе с элементами управления, унаследованными от Control класс, в то время как SynchronizationContext можно использовать в любом месте. Некоторая полезная информация относится к следующим ссылкам:
Пользовательский интерфейс Cross Thread Update | .Net
Пользовательский интерфейс Cross Thread Update с использованием SynchronizationContext | .Net
Замените ваш метод onBindViewHolder
и попробуйте,
@Override
public void onBindViewHolder(final CreditCard_PostPayAdapter.MyViewHolder holder, int position) {
holder.mDeleteButton.setTag(position);
holder.mDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int clickedPos = (int) view.getTag();
mHeaderText.remove(clickedPos);
notifyItemRemoved(position);
}
});
}
Если вы хотите удалить второй элемент. удалить элемент, а оставшаяся часть будет обработана recyclerAdapter, чтобы удалить строку и выровнять данные.
внутри вашего onClickListener, удалить данные из ArrayList и вызвать notifyItemRemoved ()
write ваш onClick внутри класса ViewHolder
onClick(View view){
mHeaderText.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
}
Надеюсь, это поможет вам.
вы удаляете элемент в списке и обновляете свой адаптер, просто делая это в своем onClick:
holder.mDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mHeaderText.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mHeaderText.size());
}
});