Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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
Java 可检查网格视图_Java_Android_Checkbox - Fatal编程技术网

Java 可检查网格视图

Java 可检查网格视图,java,android,checkbox,Java,Android,Checkbox,嗨,我正在写一个可检查的gridView,它正在工作。但不是像往常一样的意图 一切都像我所希望的那样工作,只是当选中复选框时有一个延迟 网格将变为真,但在我检查另一个网格之前,图像不会绘制。同样的情况也适用于不勾选虚假陈述 这可能真的很简单很愚蠢,但我觉得我盯着它看有点盲目。 很多坦克 public class CheckableImageView extends ImageView implements Checkable { private boolean mChecked

嗨,我正在写一个可检查的gridView,它正在工作。但不是像往常一样的意图 一切都像我所希望的那样工作,只是当选中复选框时有一个延迟

网格将变为真,但在我检查另一个网格之前,图像不会绘制。同样的情况也适用于不勾选虚假陈述

这可能真的很简单很愚蠢,但我觉得我盯着它看有点盲目。 很多坦克

   public class CheckableImageView extends ImageView implements Checkable {


    private boolean mChecked=false;

    public CheckableImageView(final Context context,
            final AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void toggle() {
        setChecked(!mChecked);
        Toast.makeText(getBaseContext(), "toggle  "+mChecked,                       Toast.LENGTH_SHORT)
                .show();

    }

    @Override
    public boolean isChecked() {
        Toast.makeText(getBaseContext(), "checked", Toast.LENGTH_SHORT)
                .show();
        return mChecked;
    }

    @Override
    public void setChecked(final boolean checked) {
        if (mChecked == checked)
            return;
        mChecked = checked;
        refreshDrawableState();

    }

     @Override
     protected void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     if(mChecked) {
     Bitmap check = BitmapFactory.decodeResource(
     getResources(), R.drawable.cecked);
     canvas.drawBitmap(check, 0,0, new Paint());

     }
     }
适配器////////////////////////////////////////////7

             public class ImageAdapter extends BaseAdapter {
    private Context context;

    public ImageAdapter(Context c) {
        context = c;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        // return randomList.size();
        return 12;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        CheckableImageView imageView;
        if (convertView == null) {
            imageView = new CheckableImageView(context, null);
            imageView.setLayoutParams(new GridView.LayoutParams(240, 240));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(5, 5, 5, 5);

        } else {
            imageView = (CheckableImageView) convertView;


        }

        imageView.setImageResource(randomList.get(position));


        return imageView;
    }

}
麦克里克/////////////////////////////////////////////

            @Override
        public void onItemClick(AdapterView parent, View v, int position,
                long id) {


              cv = (CheckableImageView) v;
              cv.toggle();
              cv.refreshDrawableState();

        }
    });
您需要拨打:

notifyDataSetChanged();

当您更改与适配器相关的数据或信息时,在适配器上。这将导致网格失效,并根据您在适配器的getView方法中覆盖的内容重新绘制网格。

您可以通过在ImageAdapter.getView中使用匿名类删除大约一半的代码


可检查还需要重写OnCreateDrawableState,以实现需要更改可绘制的内容,并且需要重新绘制


请参见切换后在onClicklistener中的imageview上调用invalidate。很好用,只是试了一下

通过在setChecked上添加一个invalidate语句解决了这个问题。但是如果有人想评论我的noob编码,请随意,这会让我更强大:我在适配器上设置了notifyDataDetChanged,但除了在可检查的imageview上添加invalidate之外,它什么都没做。是不是走错了路;应该导致视图无效,因此,如果单击的一个视图工作正常,则使其无效似乎不是一个坏的解决方案
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        final ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(getApplicationContext()) {
                @Override
                protected void onDraw(Canvas canvas) {
                    super.onDraw(canvas);
                    if(((GridView)parent).isItemChecked(position)) {
                        //...
                    }
                }
            };
        } else {
            imageView = (ImageView) convertView;
        }
        //...
    }