首页 > 解决方案 > 如何在多图像视图中处理长按

问题描述

我的布局中有 8 个数字,ImageView并且我已将LongClickListner. ImageView如果用户长按图片(任意图片),图片将保存在图库中。但我的问题是当用户长按第 8 张图片时,第 1 张或其他人(其中 1 张)将保存在图库中。我想要的是当用户长按第 8 张图像时,第 8 张图像不会保存其他图像。

 @Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.saveImage:
            if(img1.isLongClickable() ){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img1.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img2.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img2.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img3.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img3.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img4.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img4.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img5.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img5.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img6.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img6.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img7.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img7.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }else if(img8.isLongClickable()){
                BitmapDrawable bitmapDrawable = (BitmapDrawable)img8.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                Random random = new Random();
                int x = random.nextInt(1000000);
                saveImageUtils.insertImage(getActivity().getContentResolver(),bitmap,String.valueOf(x));
                //SaveImage(bitmap);
                Toast.makeText(getContext(), "Image Saved to Device", Toast.LENGTH_SHORT).show();
                break;
            }

    }
    return super.onContextItemSelected(item);
}

标签: androidonlongclicklistener

解决方案


您上面介绍的内容是这样的:

  1. 显然您的 ImageView 已OnLongClickListener分配
  2. 用户正在单击工具栏的菜单项R.id.saveImage,您正在尝试根据isLongClickable指示保存图像

如果为真,则上述内容是错误的,因为isLongClickable基本上只是表明给定控制已OnLongClickListener分配。

你应该做什么:要么在每个内部进行保存OnLongClickListener(它onLongClick会给你视图,即 ImageView),或者如果你只需要在R.id.saveImage点击时进行保存,那么OnLongClickListener你应该以某种方式告诉你的应用程序给定的 ImageView被长按,然后在R.id.saveImage单击时,遍历记录的 ImageView 长按列表并执行保存。


推荐阅读