【问题标题】:exception when click on listview before image loads在图像加载之前单击列表视图时出现异常
【发布时间】:2016-05-12 08:47:09
【问题描述】:

有一个显示图像和文本的自定义列表视图。我正在使用 Glide 图像库来加载图像。因此,当我在列表视图中搜索图像和文本时,但在图像加载之前,如果我单击它,就会看到 Java Null Pointer 异常。如何避免在加载图像之前单击或需要对 itemclick 侦听器进行任何更改。

项目点击:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    descusers du = dusers.get(position);

    final String Limage = du.image;


    if (!Limage.isEmpty()) {
    final ImageView imageView1 = (ImageView) view.findViewById(R.id.imageList);
    final GlideBitmapDrawable bitmapDrawable = (GlideBitmapDrawable) imageView1.getDrawable();
    final Bitmap yourBitmap = bitmapDrawable.getBitmap();

    Dialog builder = new Dialog(this);
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
    builder.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialogInterface) {
            //nothing;
        }
    });

    ImageView imageView = new ImageView(this);
    imageView.setImageBitmap(yourBitmap);
    p=new PhotoViewAttacher(imageView);


    builder.addContentView(imageView, new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    builder.show();

    }
}

我正在检查是否有图像 url,然后在使用 Glide 加载后获取图像,但是当我在图像加载之前单击时出现异常。有什么建议吗?

答案:

在适配器传递显示活动中创建了 Onclicklistener。

viewholder.iview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Dialog builder = new Dialog(listdisplay);
                builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
                builder.getWindow().setBackgroundDrawable(
                        new ColorDrawable(android.graphics.Color.TRANSPARENT));
                builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                        //nothing;
                    }
                });
                ImageView imageView = new ImageView(listdisplay);

                final GlideBitmapDrawable bitmapDrawable = (GlideBitmapDrawable) finalViewholder.iview.getDrawable();
                final Bitmap yourBitmap = bitmapDrawable.getBitmap();
                imageView.setImageBitmap(yourBitmap);
                p=new PhotoViewAttacher(imageView);


                builder.addContentView(imageView, new RelativeLayout.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT));
                builder.show();
            }
        });

适配器构造函数:

private Activity listdisplay;
public DescAdapter(listdisplay ds, ArrayList<descusers> dusers,Activity listdisplay) {
    this.ds = ds;
    this.dusers = dusers;
    this.listdisplay = listdisplay;

}

【问题讨论】:

  • java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'android.graphics.Bitmap com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable.getBitmap()'跨度>
  • 错误提示您对 imageView1 @user2269164 的引用为空
  • 编辑您的消息并正确添加您的 logcat,没有人会阅读您的消息,其次,向我们展示您的布局。我们需要 0 和 1 而不是猜测。
  • 您正在获取 NPE,因为您正在尝试读取实际上未下载或未下载的可绘制图像。

标签: android listview onitemclicklistener android-glide onitemclick


【解决方案1】:

在您的 getView() 上尝试使用此代码

@Override public View getView(int position, View convertView, ViewGroup parent) {
final T item = getItem(position);
....
Glide.with(getContext())
    .load(UIUtils.getThumbnailImageUrl(item.images))
    .placeholder(R.drawable.default_thumbnail_picture)
    .crossFade()
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            return false;
        }
    })
    .into(viewHolder.mExerciseImageView);
return convertView;
}

这可能会对您有所帮助。

【讨论】:

    【解决方案2】:

    您可以检查图像是否为null。您正在使用的库中可能会有回调(我不确定)

    final Bitmap yourBitmap = bitmapDrawable.getBitmap();
    if(yourBitmap==null){
     image.setEnabled(false);
    }
    

    这样您就可以避免在未加载图像时点击。 或者你可以默认setEnabled(false),当图片加载时使用setEnabled(true)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多