在片段内创建图像的GridView [英] Create a GridView of images inside a Fragment

查看:111
本文介绍了在片段内创建图像的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在片段内部创建一个网格视图。我已经实现了适配器类和相应的重写方法。但在运行时会引发一行异常:

  gridView.setOnItemClickListener(this); 

声明gridView对象是一个NULL指针。



这是我的代码(非常类似于 Google Sample ):

pre $ public static class OcrOverrideFragment extends Fragment implements AdapterView.OnItemClickListener {

// The Adapter网格视图的类
public class ImageAdaptor extends BaseAdapter {

private Context mContext;

public ImageAdaptor(Context c)
{
mContext = c;

}

public long getItemId(int position){
return(long)position;
}

public Object getItem(int position){
return null;

$ b public int getCount(){

try
{
String [] f = mContext.getAssets()。list OcrSampleImages);
返回f.length;
}
catch(IOException e)
{
LogUtil.d(TAG,OCR_OVERRIDE given+ e);
}
返回0;
}

//对于网格中的每个项目,此方法将被称为
public View getView(int position,View convertView,ViewGroup parent){

ImageView imageView = null;

尝试
{
String [] f = mContext.getAssets()。list(OcrSampleImages);

if(convertView == null){
imageView = new ImageView(getContext());
imageView.setLayoutParams(new GridView.LayoutParams(85,85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8,8,8,8);
}
else {
imageView =(ImageView)convertView;


//为每个网格项目设置适当的图像
imageView.setImageBitmap(getBitmapFromAsset(OcrSampleImages+ System.getProperty(file.separator)+ f [位置]));

$ b catch(IOException e)
{
LogUtil.d(TAG,OCR_OVERRIDE given+ e);
}

return imageView;
}
} //结束ImageAdaptor类
$ b @覆盖
public View onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){

View v = inflater.inflate(R.layout.ocr_override,container,false);

GridView gridView =(GridView)(getActivity()。findViewById(R.id.ocrgridview));
gridView.setAdapter(new ImageAdaptor(v.getContext()));
gridView.setOnItemClickListener(this);

return v;
}

@Override
public void onItemClick(AdapterView<?> adaptorView,View v,int i,long l)
{
//执行细节unncessary

}


解决方案

Change this line



pre $ GridView gridView =(GridView)(getActivity()。findViewById(R.id.ocrgridview));

  GridView gridView =(GridView)v.findViewById(R.id.ocrgridview); //注意v不是活动


I am trying to create a Grid View inside a Fragment. I have implemented the adaptor class and the respective overriden methods. But while running it throws an exception in the line :

gridView.setOnItemClickListener (this);

stating that the gridView object is a NULL pointer.

Here is my code (very similar to Google Sample) :

public static class OcrOverrideFragment extends Fragment implements AdapterView.OnItemClickListener {

    // The Adaptor Class for the grid view
    public class ImageAdaptor extends BaseAdapter{

        private Context mContext;

        public ImageAdaptor (Context c)
        {
            mContext = c;

        }

        public long getItemId(int position) {
            return (long) position;
        }

        public Object getItem(int position) {
            return null;
        }

        public int getCount (){

            try
            {
                String[] f = mContext.getAssets().list("OcrSampleImages");
                return f.length;
            }
            catch (IOException e)
            {
                LogUtil.d (TAG,"OCR_OVERRIDE gave " + e);
            }
            return 0;
        }

        // For each of the items in the grid, this method will be called
        public View getView(int position, View convertView, ViewGroup parent) {

            ImageView imageView = null;

            try
            {
                String[] f = mContext.getAssets().list("OcrSampleImages");

                if (convertView == null) {
                    imageView = new ImageView(getContext());
                    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(8, 8, 8, 8);
                }
                else {
                    imageView = (ImageView) convertView;
                }

                // Setting the appropriate image for each gird item
                imageView.setImageBitmap(getBitmapFromAsset("OcrSampleImages"+System.getProperty("file.separator")+f[position]));

            }
            catch (IOException e)
            {
                LogUtil.d (TAG,"OCR_OVERRIDE gave " + e);
            }

            return imageView;
        }
    } // End Of ImageAdaptor Class

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.ocr_override, container, false);

            GridView gridView = (GridView) (getActivity().findViewById(R.id.ocrgridview));
            gridView.setAdapter(new ImageAdaptor(v.getContext()));
            gridView.setOnItemClickListener (this);

        return v;
    }

    @Override
    public void onItemClick (AdapterView<?> adaptorView,View v,int i,long l)
    {
        // Implementation details unncessary

    }

解决方案

Change this line

GridView gridView = (GridView) (getActivity().findViewById(R.id.ocrgridview));

To

GridView gridView = (GridView) v.findViewById(R.id.ocrgridview); //Note "v" not activity

这篇关于在片段内创建图像的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆