Reputation: 179
Where am I going wrong? Why this null pointer exception
private class GridAdapter extends BaseAdapter {
private LayoutInflater inflater;
public GridAdapter(Context context) {
Logger.d(TAG, "GridAdapter");
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
Logger.d("SIZE",""+AppConstants.getMenuList().size());
return AppConstants.getMenuList().size();
}
@Override
public Object getItem(int i) {
return AppConstants.getMenuList().get(i);
}
@Override
public long getItemId(int i) {
return i;
}
class ViewHolder {
TextView title;
RelativeLayout layout;
ImageView image;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = inflater.inflate(R.layout.inflater_grid_layout, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.layout = (RelativeLayout) view.findViewById(R.id.igl_layout);
viewHolder.title = (TextView) view.findViewById(R.id.igl_name);
viewHolder.image = (ImageView) view.findViewById(R.id.igl_image);
view.setTag(viewHolder);
} else {
view = convertView;
}
final ViewHolder holder = (ViewHolder) view.getTag();
MenuModel item = (MenuModel) getItem(position);
holder.layout.setBackgroundColor(item.getColor()); //NULL POINTER HERE
holder.title.setText(item.getName());
holder.image.setImageResource(item.getImage());
return view;
}
}
This is my LogCat:
java.lang.NullPointerException at in.abm.indiape.fragments.GridMenuScreen$GridAdapter.getView(GridMenuScreen.java:115) at android.widget.AbsListView.obtainView(AbsListView.java:2624) at android.widget.GridView.onMeasure(GridView.java:1045) at android.view.View.measure(View.java:16831) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477) at android.view.View.measure(View.java:16831)
Upvotes: 0
Views: 1340
Reputation: 133560
You setTag
to view not toconvertView
. In the else part you have view = convertView;
.
Then you have view.getTag()
which probably returns null when convertView
is not null as suggested by prosper k.
There is no need to use View view
you can directly use convertView
.
So Change getView
to
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView= inflater.inflate(R.layout.inflater_grid_layout, null);
viewHolder = new ViewHolder();
viewHolder.layout = (RelativeLayout) convertView.findViewById(R.id.igl_layout);
viewHolder.title = (TextView) convertView.findViewById(R.id.igl_name);
viewHolder.image = (ImageView) convertView.findViewById(R.id.igl_image);
convertView.setTag(viewHolder); // setTag if convertView is null
} else {
viewHolder = (ViewHolder)convertView.getTag();
// get tag if convertView is not null
}
MenuModel item = (MenuModel) getItem(position);
// update ui elements
viewHolder.layout.setBackgroundColor(item.getColor());
viewHolder.title.setText(item.getName());
viewHolder.image.setImageResource(item.getImage());
return convertView;
}
Upvotes: 1