Android:onPreDrawListener没有';t在RecyclerView内部的自定义视图中删除
我有带有自定义视图的RecyclerView。在自定义视图中,我创建一个ImageView并添加它。此外,我还为创建的ImageView添加了onPreDrawListener,并在调用onPreDraw回调时将其删除。但我发现,每次调用onBindViewHolder都会增加对onPreDraw回调的调用。 下面是我的代码示例:Android:onPreDrawListener没有';t在RecyclerView内部的自定义视图中删除,android,Android,我有带有自定义视图的RecyclerView。在自定义视图中,我创建一个ImageView并添加它。此外,我还为创建的ImageView添加了onPreDrawListener,并在调用onPreDraw回调时将其删除。但我发现,每次调用onBindViewHolder都会增加对onPreDraw回调的调用。 下面是我的代码示例: public class CustomView extends RelativeLayout { private static final String TAG =
public class CustomView extends RelativeLayout {
private static final String TAG = CustomView.class.getName();
private static final String VIEW_TAG = "VIEW_TAG";
private ImageView imageView;
private static int counter = 0;
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
imageView = new AppCompatImageView(getContext());
imageView.setTag(VIEW_TAG);
imageView.setImageDrawable(new ColorDrawable(ContextCompat.getColor(getContext(), R.color.colorPrimary)));
LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
View view = findViewWithTag(VIEW_TAG);
if (view != null) {
removeView(view);
}
addView(imageView, layoutParams);
counter++;
imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
imageView.getViewTreeObserver().removeOnPreDrawListener(this);
counter--;
Log.e(TAG, "Counter: " + counter);
return true;
}
});
}
}
private static class Adapter extends RecyclerView.Adapter {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View root = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout__item_view, parent, false);
return new ViewHolder(root);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
((ViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyItemChanged(holder.getAdapterPosition());
}
});
}
@Override
public int getItemCount() {
return 100;
}
private static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
}
通过单击日志中适配器中的项,我看到计数器变量的值正在减小。而不是我期望的零值。有人知道原因吗?我刚刚发现这是一个错误