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

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -