2016-07-18 24 views
0

ich in einer Klasse android Snack-Bar ist mit der, dass auf Basis Adapter erweitern, wenn ich das Bild klicken i einen NULL-Zeiger exception.I hat diesen Code verwendet bin immer sdcard laod Bildern von und es in der Gridview anzeigen.Wie snackbar in Android-Basis-Adapter verwenden

public class GridViewImageAdapter extends BaseAdapter{ 
private Activity _activity; 
private ArrayList<String> _filePaths = new ArrayList<String>(); 
private int imageWidth; 
private View view; 
public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths, 
          int imageWidth) { 
    this._activity = activity; 
    this._filePaths = filePaths; 
    this.imageWidth = imageWidth; 
} 

@Override 
public int getCount() { 
    return this._filePaths.size(); 
} 

@Override 
public Object getItem(int position) { 
    return this._filePaths.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 
public void removeitem(int position){ 
    this._filePaths.remove(position); 
    notifyDataSetChanged(); 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     imageView = new ImageView(_activity); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    // get screen dimensions 
    Bitmap image = decodeFile(_filePaths.get(position), imageWidth, 
      imageWidth); 

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, 
      imageWidth)); 
    imageView.setImageBitmap(image); 

    // image view click listener 
    imageView.setOnClickListener(new OnImageClickListener(position)); 

    return imageView; 
} 

class OnImageClickListener implements OnClickListener { 

    int _postion; 

    // constructor 
    public OnImageClickListener(int position) { 
     this._postion = position; 
    } 

    @Override 
    public void onClick(View v) { 
     // on selecting grid view image 
     // launch full screen activity 
     // Intent i = new Intent(_activity, FullScreenViewActivity.class); 
    // i.putExtra("position", _postion); 
    // _activity.startActivity(i); 

     final String imgPath=_filePaths.get(_postion); 
     final Snackbar snackbar = Snackbar 
       .make(view, "Delete Image?", Snackbar.LENGTH_LONG) 
       .setAction("DELETE", new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         File file = new File(imgPath); 
         file.delete(); 

         Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!", Snackbar.LENGTH_SHORT); 
         notifyDataSetChanged(); 
         View sbView = snackbar1.getView(); 
         TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
         textView.setTextColor(Color.YELLOW); 
         snackbar1.show(); 

        } 
       }); 
     snackbar.setActionTextColor(Color.RED); 
     View sbView = snackbar.getView(); 
     TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
     textView.setTextColor(Color.YELLOW); 
     snackbar.show(); 

    } 

} 

/* 
* Resizing image size 
*/ 
public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) { 
    try { 

     File f = new File(filePath); 

     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     final int REQUIRED_WIDTH = WIDTH; 
     final int REQUIRED_HIGHT = HIGHT; 
     int scale = 1; 
     while (o.outWidth/scale/2 >= REQUIRED_WIDTH 
       && o.outHeight/scale/2 >= REQUIRED_HIGHT) 
      scale *= 2; 

     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

}

Fehler:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference 
     at android.support.design.widget.Snackbar.<init>(Snackbar.java:180) 
     at android.support.design.widget.Snackbar.make(Snackbar.java:209) 
     at nidhinkumar.gridcam.camerasample.adapter.GridViewImageAdapter$OnImageClickListener.onClick(GridViewImageAdapter.java:95) 
     at android.view.View.performClick(View.java:4848) 
     at android.view.View$PerformClick.run(View.java:20260) 
     at android.os.Handler.handleCallback(Handler.java:815) 
     at android.os.Handler.dispatchMessage(Handler.java:104) 
     at android.os.Looper.loop(Looper.java:194) 
     at android.app.ActivityThread.main(ActivityThread.java:5624) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 
+1

'' Ansicht ist 'null'. add 'view = v; 'in onClick Methode –

+0

es funktioniert danke –

Antwort

2

Das Problem ist mit der Ansicht, die Sie Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!", Snackbar.LENGTH_SHORT); sind vorbei Sie haben view nicht initialisiert. Initialisieren Sie view

+0

ja ich habe initialisiert und jetzt funktioniert es danke SaravInfern –

0
public void onClick(View v) { 
     // on selecting grid view image 
     // launch full screen activity 
     // Intent i = new Intent(_activity, FullScreenViewActivity.class); 
    // i.putExtra("position", _postion); 
    // _activity.startActivity(i); 
     view=v; 
     final String imgPath=_filePaths.get(_postion); 
     final Snackbar snackbar = Snackbar 
       .make(view, "Delete Image?", Snackbar.LENGTH_LONG) 
       .setAction("DELETE", new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         File file = new File(imgPath); 
         file.delete(); 

         Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!", Snackbar.LENGTH_SHORT); 
         notifyDataSetChanged(); 
         View sbView = snackbar1.getView(); 
         TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
         textView.setTextColor(Color.YELLOW); 
         snackbar1.show(); 

        } 
       }); 
     snackbar.setActionTextColor(Color.RED); 
     View sbView = snackbar.getView(); 
     TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
     textView.setTextColor(Color.YELLOW); 
     snackbar.show(); 

    } 

ich die Ansicht mit Blick = v initialisiert undd jetzt funktioniert es