Currently, when the ListItem is clicked I grab its position and pass it to my StopsScheduleActiviy. I would like to detect when the ImageView of that ListItem is clicked so that I can launch my MapActivity instead and pass it the position.
Basically: Click the ImageView launch MapsActivity, otherwise click anywhere else on ListItem launch StopsScheduleActivity. In Both cases I need the position. How can I do this?
Here is my current onItemClick listener.
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent myIntent = new Intent(this, StopsScheduleActivity.class);
myIntent.putExtra("stop", stops.get(position));
startActivity(myIntent);
Log.i("Winnipeg Bus", "Stop item #" + id + " clicked.");
}
Here is my ListView with a map for an ImageView that I want to listen to for clicks. Thanks!
In you Custom Adapter getView()
method , when you are init the ImageView
. Add position as a tag for image view. So each time when new ImageView
will appear it will hold its position in his tag. Then just add the OnClickListener()
in getView()
.
OnClickListener(View view)
contains the view which was clicked by user. So when user will click any image view in the list. Then it will be passed to OnClickListener(View view)
as a clicked view. And we know that our ImageView
contains the position as a tag. So the tag can tell us that this ImageView
is for ? position. :)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.list_row, parent, false);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.videoListImage);
imageView.setTag(new Integer(position));
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, "ImageView clicked for the row = "+view.getTag().toString(), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
You will get the clicked ImageView
position.