如何在android base adapter中使用snackbar

如何在android base adapter中使用snackbar,android,adapter,baseadapter,Android,Adapter,Baseadapter,我在一个扩展到基本适配器的类中使用android snack bar,当我单击图像时,我得到一个空指针异常。我使用此代码从SD卡中读取图像并在gridview中显示 public class GridViewImageAdapter extends BaseAdapter{ private Activity _activity; private ArrayList<String> _filePaths = new ArrayList<String>(); private

我在一个扩展到基本适配器的类中使用android snack bar,当我单击图像时,我得到一个空指针异常。我使用此代码从SD卡中读取图像并在gridview中显示

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;
}
公共类GridViewImageAdapter扩展了BaseAdapter{
私人活动;
private ArrayList_filepath=new ArrayList();
私有整数图像宽度;
私人视野;
公共GridViewImageAdapter(活动、ArrayList文件路径、,
int图像宽度){
这个。_活动=活动;
这是。_filepath=filepath;
this.imageWidth=imageWidth;
}
@凌驾
public int getCount(){
返回此文件。_filepath.size();
}
@凌驾
公共对象getItem(int位置){
返回此。\u filepath.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
公共无效删除项(内部位置){
此._filepath.remove(位置);
notifyDataSetChanged();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
imageView=新的imageView(_活动);
}否则{
imageView=(imageView)convertView;
}
//获取屏幕尺寸
位图图像=解码文件(_filepath.get(位置)、图像宽度、,
图像宽度);
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
imageView.setLayoutParams(新的GridView.LayoutParams(imageWidth,
图像宽度);
设置图像位图(图像);
//图像视图单击侦听器
setOnClickListener(新的OnImageClickListener(位置));
返回图像视图;
}
类OnImageClickListener实现OnClickListener{
内部职位;
//建造师
公共OnImageClickListener(int位置){
这个位置=位置;
}
@凌驾
公共void onClick(视图v){
//关于网格视图图像的选择
//启动全屏活动
//意向i=新意向(_活动,FullScreenViewActivity.class);
//i.putExtra(“位置”、_位置);
//_活动。起始触觉(i);
最后一个字符串imgPath=\u filepath.get(\u position);
最终蛇杆蛇杆=蛇杆
.make(查看“删除图像?”,Snackbar.LENGTH\u LONG)
.setAction(“删除”,新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
File File=新文件(imgPath);
delete();
Snackbar Snackbar 1=Snackbar.make(查看“图像已删除!”,Snackbar.LENGTH\u SHORT);
notifyDataSetChanged();
View sbView=snackbar1.getView();
TextView TextView=(TextView)sbView.findviewbyd(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.findviewbyd(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.YELLOW);
snackbar.show();
}
}
/*
*调整图像大小
*/
公共静态位图解码文件(字符串文件路径、整数宽度、整数高度){
试一试{
文件f=新文件(文件路径);
BitmapFactory.Options o=新的BitmapFactory.Options();
o、 inJustDecodeBounds=true;
解码流(新的FileInputStream(f),null,o);
所需的最终int_宽度=宽度;
所需的最终整数\u HIGHT=HIGHT;
int标度=1;
而(o.outWidth/scale/2>=所需的宽度
&&o.外部高度/刻度/2>=所需高度)
比例*=2;
BitmapFactory.Options o2=新的BitmapFactory.Options();
o2.inSampleSize=刻度;
返回BitmapFactory.decodeStream(新文件输入流(f),null,o2);
}catch(filenotfounde异常){
e、 printStackTrace();
}
返回null;
}
}

错误:

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)
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.Context android.view.ViewGroup.getContext()”
位于android.support.design.widget.Snackbar.(Snackbar.java:180)
位于android.support.design.widget.Snackbar.make(Snackbar.java:209)
在nidhinkumar.gridcam.camerasample.adapter.GridViewImageAdapter$OnImageClickListener.onClick(GridViewImageAdapter.java:95)
在android.view.view.performClick上(view.java:4848)
在android.view.view$PerformClick.run(view.java:20260)
位于android.os.Handler.handleCallback(Handler.java:815)
位于android.os.Handler.dispatchMessage(Handler.java:104)
位于android.os.Looper.loop(Looper.java:194)
位于android.app.ActivityThread.main(ActivityThread.java:5624)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:959)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

问题在于您要传递的视图

    Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!",Snackbar.LENGTH_SHORT);

您尚未初始化
视图
。初始化您的
视图

问题在于您传递的视图

    Snackbar snackbar1 = Snackbar.make(view, "Image Deleted!",Snackbar.LENGTH_SHORT);
 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();

    }
您尚未初始化
视图
。初始化
视图

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

    }
我已经使用view=v和d初始化了视图,现在它可以工作了


我已经使用view=v和d初始化了视图,现在它可以工作了。添加
view=v在onClick方法中有效谢谢
查看
null
。添加
view=v在onClick方法中它可以工作谢谢你是的,我已经初始化,现在可以工作谢谢你saravInfernyes我已经初始化,现在可以工作谢谢你saravInfern