Skip to main content

ArrayIndexOutOfBoundsException with custom Android Adapter for multiple views in ListView



I am attempting to create a custom Adapter for my ListView since each item in the list can have a different view (a link, toggle, or radio group), but when I try to run the Activity that uses the ListView I receive an error and the app stops. The application is targeted for the Android 1.6 platform.





The code:







public class MenuListAdapter extends BaseAdapter {

private static final String LOG_KEY = MenuListAdapter.class.getSimpleName();



protected List<MenuItem> list;

protected Context ctx;

protected LayoutInflater inflater;



public MenuListAdapter(Context context, List<MenuItem> objects) {

this.list = objects;

this.ctx = context;

this.inflater = (LayoutInflater)this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}



@Override

public View getView(int position, View convertView, ViewGroup parent) {

Log.i(LOG_KEY, "Position: " + position + "; convertView = " + convertView + "; parent=" + parent);

MenuItem item = list.get(position);

Log.i(LOG_KEY, "Item=" + item );



if (convertView == null) {

convertView = this.inflater.inflate(item.getLayout(), null);

}



return convertView;

}



@Override

public boolean areAllItemsEnabled() {

return false;

}



@Override

public boolean isEnabled(int position) {

return true;

}



@Override

public int getCount() {

return this.list.size();

}



@Override

public MenuItem getItem(int position) {

return this.list.get(position);

}



@Override

public long getItemId(int position) {

return position;

}



@Override

public int getItemViewType(int position) {

Log.i(LOG_KEY, "getItemViewType: " + this.list.get(position).getLayout());

return this.list.get(position).getLayout();

}



@Override

public int getViewTypeCount() {

Log.i(LOG_KEY, "getViewTypeCount: " + this.list.size());

return this.list.size();

}



}







The error I receive:







java.lang.ArrayIndexOutOfBoundsException

at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:3523)

at android.widget.ListView.measureHeightOfChildren(ListView.java:1158)

at android.widget.ListView.onMeasure(ListView.java:1060)

at android.view.View.measure(View.java:7703)







I do know that the application is returning from getView and everything seems in order.





Any ideas on what could be causing this would be appreciated.





Thanks,





-Dan


Comments

  1. The item view type you are returning from getItemViewType() is >= getViewTypeCount().

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.