在片段内创建图像的GridView [英] Create a GridView of images inside a Fragment
问题描述
我试图在片段内部创建一个网格视图。我已经实现了适配器类和相应的重写方法。但在运行时会引发一行异常:
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屋!