Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:onPreDrawListener没有';t在RecyclerView内部的自定义视图中删除_Android - Fatal编程技术网

Android:onPreDrawListener没有';t在RecyclerView内部的自定义视图中删除

Android:onPreDrawListener没有';t在RecyclerView内部的自定义视图中删除,android,Android,我有带有自定义视图的RecyclerView。在自定义视图中,我创建一个ImageView并添加它。此外,我还为创建的ImageView添加了onPreDrawListener,并在调用onPreDraw回调时将其删除。但我发现,每次调用onBindViewHolder都会增加对onPreDraw回调的调用。 下面是我的代码示例: public class CustomView extends RelativeLayout { private static final String TAG =

我有带有自定义视图的RecyclerView。在自定义视图中,我创建一个ImageView并添加它。此外,我还为创建的ImageView添加了onPreDrawListener,并在调用onPreDraw回调时将其删除。但我发现,每次调用onBindViewHolder都会增加对onPreDraw回调的调用。 下面是我的代码示例:

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);
        }
    }
}

通过单击日志中适配器中的项,我看到计数器变量的值正在减小。而不是我期望的零值。有人知道原因吗?

我刚刚发现这是一个错误