android - Difference between view.findViewById(R.id....) and just findViewById(R.id...) -
i'm trying implement custom array adapter ,
problem code crashes when use
imageview imageview=(imageview)findviewbyid(r.id.imageview);
rather
imageview imageview=(imageview)rowview.findviewbyid(r.id.imageview);
where rowview layout file listview have infalted.
why occur , thought rowview.findviewbyid(r.id..) make faster find element id, without app crashes, can please explain
this activity code
public class mainactivity extends appcompatactivity {
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //now list view listview listview=(listview)findviewbyid(r.id.listview); string[] values =new string[]{"ios","android","firefoxos","ubuntu"}; mysimpleadapter simpleadapter=new mysimpleadapter(this,values); listview.setadapter(simpleadapter); // } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } class mysimpleadapter extends arrayadapter<string>{ private context context; private string[] values; @override public view getview(int position, view convertview, viewgroup parent) { //listview calls on adapter each row log.v("list","getview"); layoutinflater inflater = (layoutinflater) context .getsystemservice(context.layout_inflater_service); view rowview=inflater.inflate(r.layout.custom_row,parent,false); textview textview1= (textview) rowview.findviewbyid(r.id.textview1); textview1.settext(values[position]); //for android row alone set image , others leave blank if(values[position].startswith("and")) { imageview imageview=(imageview)rowview.findviewbyid(r.id.imageview); imageview.setimageresource(r.drawable.ic_launcher);//ok r.drawale....is id } return rowview; } public mysimpleadapter(context context,string[] values) { super(context, r.layout.custom_row,values); this.context=context; this.values=values; log.v("list","constructor"); } }
}
findviewbyid aways requires context find view.
if calling class extended activity
, use findviewbyid
, because activity context.
when using in class extends fragment
, have use getactivity().findviewbyid
in case, since using in adapter
, need find thet view within listview row
. use view.findviewbyid
Comments
Post a Comment