I am using ListView with two different row layouts. The data is set and displayed properly but when i scroll up its getting null pointer exception. In logs its pointing to holder.mainContainer as null pointer, I had added comment in code where i am getting null pointer exception.
public static class ViewHolder {
....
public TextView title;
public RelativeLayout mainContainer;
public LinearLayout categoryContainer;
public TextView submenuCategoryTitle;
....
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder;
final MultiTierMenu multiTierMenu = mMultiTierMenuList.get(position);
if (convertView == null) {
holder = new ViewHolder();
if(multiTierMenu instanceof SubMenu) {
vi = inflater.inflate(R.layout.event_list_snippet),
null);
....
holder.mainContainer = (RelativeLayout) vi.findViewById(R.id. snippet_container);
holder.title = (TextView) vi.findViewById(R.id.list_title);
....
vi.setTag(holder);
}
else if(multiTierMenu instanceof MenuCategory) {
vi = inflater.inflate(R.layout.submenu_category_list_item),
null);
....
holder.categoryContainer = (LinearLayout) vi.findViewById(R.id.category_container);
holder.submenuCategoryTitle = (TextView) vi.findViewById(R.id.subcategory_title);
....
vi.setTag(holder);
}
else
holder = (ViewHolder) vi.getTag();
//SubMenu
if(multiTierMenu instanceof SubMenu) {
final SubMenu subMenu = (SubMenu) multiTierMenu;
//GETTING NULL POINTER EXCEPTION HERE ON SCROLL UP
//if(null != holder.mainContainer) {
if(subMenu.getIsVisibleMenu())
==> holder.mainContainer.setVisibility(View.VISIBLE);
else
holder.mainContainer.setVisibility(View.GONE);
//}
//ADDING NULL CHECK ABOVE - GETTING NULL POINTER EXCEPTION HERE
holder.title.setText(subMenu.getTitle());
....
}
else if(multiTierMenu instanceof MenuCategory) {
final MenuCategory menuCategory = (MenuCategory) multiTierMenu;
holder.submenuCategoryTitle.setText(menuCategory.getTitle());
....
}
return vi;
}
Did you implement following two methods?
you have to return each number by position
you have to return the number of views
if their methods are implemented, “inflate” is needed only in (convertView == null).
like following…