0

Существует пользовательское listview, которое отображает изображение и текст. Я использую библиотеку изображений Glide для загрузки изображения. Поэтому, когда я просматриваю изображение и выводит текст в списке, но перед загрузкой изображения, если я нажму на него, будет видно исключение Java Null Pointer. Как избежать клика перед загрузкой изображения или любых изменений, необходимых для выполнения прослушивателя itemclick.Исключение при щелчке по списку перед загрузкой изображений

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; 

} 
+0

показать свою LogCat –

+0

java.lang.NullPointerException: попытка вызвать виртуальный метод «android.graphics.Bitmap com.bumptech.glide.load.resource.bitmap. GlideBitmapDrawable.getBitmap() 'на ссылке нулевого объекта – user2269164

+0

, так как ошибка предполагает, что у вас есть нулевая ссылка на ваш imageView1 @ user2269164 – KDeogharkar

ответ

0

Попробуйте с этим кодом на вашем 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; 
} 

Это может поможет вам.

0

вы можете проверить, есть ли изображение null или нет. может быть там будет обратные вызовы в библиотеке, которую вы используете (я не уверен)

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

так что вы можете избежать щелчок, если изображение не загружено. или вы можете setEnabled(false) по умолчанию, и когда изображение, загруженное использование setEnabled(true)

Смежные вопросы