I don't see any problems with my gridview but when I run, it get crash without any errors in gradle build. here is my gridview main:
GridView grid;
public boolean blablabla = true;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.first_frag, container, false);
ArrayList<String> web = new ArrayList<String>();
ArrayList<Integer> imageId = new ArrayList<Integer>();
web.add("test");
web.add("test");
web.add("test");
for (int i = 0; i < web.size(); i++) {
switch (i) {
case 0:
if (blablabla== true) {
imageId.add(R.drawable.ic_luncher);
} else {
imageId.add(R.drawable.ic_luncher);
}
break;
case 1:
if (lvl1 == true) {
//set image 1
} else {
//set image 2
}
break;
case 2:
if (lvl2 == true) {
//set image 1
} else {
//set image 2
}
break;
default:
}
}
CustomGrid adapter = new CustomGrid(getActivity(), web.toArray(new String[web.size()]), imageId.toArray(new Integer[imageId.size()]));
grid=(GridView) v.findViewById(R.id.grid);
grid.setAdapter(adapter);
adapter:
public class CustomGrid extends BaseAdapter{
private Context mContext;
private final String[] web;
private final Integer[] Imageid;
public CustomGrid(Context c, String[] web, Integer[] Imageid ) {
mContext = c;
this.Imageid = Imageid;
this.web = web;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return web.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View grid;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
grid = new View(mContext);
grid = inflater.inflate(R.layout.grid_single, null);
TextView textView = (TextView) grid.findViewById(R.id.grid_text);
ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image);
textView.setText(web[position]);
imageView.setImageResource(Imageid[position]);
} else {
grid = (View) convertView;
}
return grid;
}
}
logcat:
FATAL EXCEPTION: main java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at example.examplee.com.newproject.CustomGrid.getView(CustomGrid.java:58) at android.widget.AbsListView.obtainView(AbsListView.java:2207) at android.widget.GridView.makeAndAddView(GridView.java:1341) at android.widget.GridView.makeRow(GridView.java:341) at android.widget.GridView.fillDown(GridView.java:283) at android.widget.GridView.fillFromTop(GridView.java:417) at android.widget.GridView.layoutChildren(GridView.java:1229)
Thanks
1.the web
's length is 3
.So the Imageid
's length should be 3
.
2.If the Imageid
's length is 1
,it will cause ArrayIndexOutOfBoundsException
in your code .
So check your web
length and Imageid
length should be the same .
Could you add all image ?
for (int i = 0; i < web.size(); i++) {
switch (i) {
case 0:
if (blablabla== true) {
imageId.add(R.drawable.ic_luncher);
} else {
imageId.add(R.drawable.ic_luncher);
}
break;
case 1:
if (lvl1 == true) {
//set image 1
imageId.add(R.drawable.ic_luncher);
} else {
//set image 2
imageId.add(R.drawable.ic_luncher);
}
break;
case 2:
if (lvl2 == true) {
//set image 1
imageId.add(R.drawable.ic_luncher);
} else {
//set image 2
imageId.add(R.drawable.ic_luncher);
}
break;
default:
}
}