java - Android's List View. Parameterized type in AdapterView.OnItemClickListener -
i have listview hypothetical squirreladapter. this:
public class squirreladapter extends arrayadapter<squirrel> { private layoutinflater layoutinflater; private context context; private int resource; public squirreladapter (context context, int resource, list<squirrel> squirrels) { super(context, resource, squirrels); layoutinflater = layoutinflater.from(context); this.context = context; this.resource = resource; } @override public view getview(int position, view convertview, viewgroup parent) { squirrel squirrel = getitem( position ); convertview = layoutinflater.inflate(resource, null); textview squirrelnicknametextview = (textview) convertview.findviewbyid(r.id.squirrelnickname); squirrelnicknametextview.settext( squirrel.getcutenickname() ); return convertview; } } so in activity can this:
squirrel[] squirrels = // lot of squirrels squirreladapter squirreladapter = new squirreladapter( getapplicationcontext(), r.layout.squirrel_layout, arrays.aslist( squirrels ) ); squirrellistview.setadapter( squirreladapter ); and can append onitemclicklistener:
squirrellistview.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // bad people cast squirrel :| squirrel squirrel = (squirrel) parent.getitematposition(position); log.i("wwf", "tapped squirrel " + squirrel.getcutenickname()); } }); it works well. boring question:
how can use java's parameterized type in adapterview<t extends adapter>.setonitemclicklistener? i'm thinking below, gives errors:
squirrellistview.setonitemclicklistener(new adapterview<squirreladapter>.onitemclicklistener() { @override public void onitemclick(adapterview<squirreladapter> parent, view view, int position, long id) { // squirrels approved! squirrel squirrel = parent.getitematposition(position); log.i("wwf", "tapped squirrel " + squirrel.getcutenickname()); } }); why can't have syntax such "
adapterview<arrayadapter<t>>.onitemclicklistener"?why doesn't exist:
<t> getitemposition(int position)? can implemented?
thanks helping squirrels not casted.
(more want learn more java feature...)
as might have seen if try new adapterview<squirreladapter>.onitemclicklistener() compiler say,
the member type adapterview<squirreladapter>.onitemclicklistener cannot qualified parameterized type, since static.
what doing inside listview.setonitemclicklistener create anonymous class, interface onitemclicklistener inside abstract class adapterview. now, reference of interface inside abstract class, need access statically, such adapterview.onitemclicklistener, , hence compiler error above.
even if try create concrete class implements onitemclicklistener have access statically only, such class myimpl implements myabstract.myinterface
if have noticed signature of adapterview class
abstract class adapterview<t extends adapter> that indicates, adapterview can have adapter or subtype of parameter. hold of elements(data) adapter connected to, adapterview uses
object getitem(int position); as see inside:
public object getitematposition(int position) { t adapter = getadapter(); return (adapter == null || position < 0) ? null : adapter.getitem(position); } casting of squirrel inside onitemclick needed. see if helps!
Comments
Post a Comment