私はrecyclerView
をdatabinding
と使用しています。 それはうまく動作しますが、onBindViewHolder
メソッド内のバインディングモデルを変更しようとすると、私は奇妙な動作をします。そのメソッドは繰り返し実行されます。ここ は私adapter
です:Android。モデルを変更すると、onBindViewHolder内のメソッドが繰り返し実行されます
public class TasksLevelAdapter extends RealmRecyclerViewAdapter<RealmArticle, TasksLevelAdapter.MyViewHolder> {
private String TAG = "MYAPP";
protected TasksLevelAdapter(OrderedRealmCollection<RealmArticle> data, Activity mActivity) {
super(data, true);
setHasStableIds(true);
this.mActivity = mActivity;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater =
LayoutInflater.from(parent.getContext());
RowRecyclerviewMainBinding itemBinding =
RowRecyclerviewMainBinding.inflate(layoutInflater, parent, false);
return new MyViewHolder(itemBinding);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final RealmArticle obj = getItem(position);
int idTask = obj.getIdTask();
holder.data = obj;
holder.bind(obj);
Log.e(TAG, new Date().getTime() + "");
new Handler().postDelayed(new Runnable() { // - when I add this handler I'm getting it called repeatedly
@Override
public void run() {
Realm.getDefaultInstance()
.executeTransaction(trans -> obj.setItemsCount("111"));
}
}, 1000);
}
@Override
public long getItemId(int index) {
return getItem(index).getIdTaskart();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private final RowRecyclerviewMainBinding binding;
private RealmArticle data;
public MyViewHolder(RowRecyclerviewMainBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(RealmArticle obj) {
binding.setObj(obj);
binding.executePendingBindings();
}
}
}
そして、私はonBindViewHolder
内handler
を削除すると、Log.e
は一度だけ実行されます。
モデルを変更したときにOnbindViewHolder
のメソッドが繰り返し実行されるのはなぜですか?そしてこれを避ける方法は?
ありがとう!しかし、スーパー(データ、偽) – Rainmaker