0

Es gibt eine benutzerdefinierte Listenansicht, die Bild und Text anzeigt. Ich verwende die Glide-Bildbibliothek, um das Bild zu laden. Wenn ich also das Bild und den Text in der Listenansicht suche, aber bevor das Bild geladen wird, wenn ich darauf klicke, wird die Ausnahme Java Null Pointer angezeigt. Wie vermeidet man einen Klick, bevor das Laden des Bildes oder eine Änderung für den ItemClick-Listener erforderlich ist?Ausnahme beim Klicken auf Listenansicht vor dem Laden von Bildern

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(); 

    } 
} 

ich Überprüfung mich, ob es Bild ist url dann das Bild nach dem Laden holen Glide verwenden, aber Ausnahme, wenn ich vor dem Bild lädt klicken. irgendein Vorschlag?

Antwort:

Erstellt OnClickListener in Adapter Display-Aktivität übergeben.

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(); 
      } 
     }); 

Adapter Konstruktor:

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

} 
+0

zeigen Sie Ihre logcat –

+0

java.lang.NullPointerException: Versuch android.graphics.Bitmap com.bumptech.glide.load.resource.bitmap virtuelle Methode‘aufzurufen. GlideBitmapDrawable.getBitmap() 'auf einem Null-Objekt Referenz – user2269164

+0

als Fehler schlug vor, Sie haben Null-Verweis auf Ihre imageView1 @ user2269164 – KDeogharkar

Antwort

0

mit diesem Code auf Ihrer getView Versuchen()

@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; 
} 

Dies kann Ihnen hilft.

0

können Sie überprüfen, ob das Bild null oder nicht ist. kann es sein wird, Rückrufe in der Bibliothek sein, die Sie verwenden (ich bin nicht sicher)

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

so können Sie den Klick vermeiden, wenn das Bild nicht geladen wird. oder Sie können setEnabled(false) standardmäßig aktiviert und wenn das Bild geladen Verwendung setEnabled(true)