Reputation: 8461
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!
Upvotes: 6
Views: 27111
Reputation: 2562
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(conText).inflate(
R.layout.gridgoggle, parent, false);
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageView1.setImageResource(Integer.parseInt((mData
.get(position).get("image"))));
holder.imageView1.setId(position);
holder.imageView1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int id = v.getId();
//here id is position.
Intent myIntent = new Intent(this, StopsScheduleActivity.class);
myIntent.putExtra("stop", id);
startActivity(myIntent);
}
});
return convertView;
}
Upvotes: 4
Reputation: 18746
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.
Upvotes: 26
Reputation: 1
In three simple steps:
1 In your adapter method getView(int position, View convertView, ViewGroup parent):
ImageView imageview =(ImageView) convertView.findViewById(R.id.imageView);
imageview.setTag(new Integer(position));
2 In layout.xml
add the method onClick()
on the ImageView
3 implements onClick()
method and retrieves the index by view.getTag()
Upvotes: 0
Reputation: 109237
For ImageView's Click You have to make a custom adapter for your listview.
And in adpater's getView()
method just write a imageView's onClick()
, And start your new activity from that imageview's onClick().
For custom list just look at this tutorial Android Series: Custom ListView items and adapters ..
Upvotes: 12