我将recyclerView
与databinding
一起使用。
它工作正常,但是当我试图在onBindViewHolder
方法中更改绑定模型时,我得到一个奇怪的行为:该方法重复执行。
这是我的adapter
:
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();
}
}
}
当我在handler
内删除onBindViewHolder
时,Log.e
只执行一次。
为什么更改模型时OnbindViewHolder
内的方法会反复执行?以及如何避免这种情况?
答案 0 :(得分:1)
您可以在启用自动更新的情况下创建适配器:
super(data, true);
在发布的Runnable
内,您可以更改绑定对象的数据,从而触发更新。这就是再次调用onBindViewHolder()
的原因。
一起使用自动更新和数据绑定似乎有点多余。如果RealmArticle
是数据绑定可观察对象,则可能不使用自动更新进行更新。所以只需禁用updateOnModification
。
super(data, true, false);