【问题标题】:How to handle long click in multi image view如何在多图像视图中处理长按
【发布时间】:2019-03-25 04:49:48
【问题描述】:

我的布局中有 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);
}

【问题讨论】:

  • 显示完整代码sn-p。看不懂现有的。

标签: android onlongclicklistener


【解决方案1】:

你上面介绍的是这样的:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2011-01-20
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多