2011-12-20 8 views
5

Actualmente, cuando se hace clic en ListItem, tomo su posición y la paso a StopsScheduleActiviy. Me gustaría detectar cuándo se hace clic en ImageView de ese ListItem para que pueda iniciar mi MapActivity y pasarle la posición.Haga clic en ImageView dentro de ListView ListItem y obtenga el puesto?

Básicamente: haga clic en ImageView para iniciar MapsActivity; de lo contrario, haga clic en cualquier otro lugar en ListItem para iniciar StopsScheduleActivity. En ambos casos, necesito el puesto. ¿Cómo puedo hacer esto?

Aquí está mi oyente onItemClick actual.

@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."); 
} 

Aquí está mi ListView con un mapa para un ImageView que quiero escuchar para los clics. ¡Gracias!

enter image description here

+0

posición de onItemClick no da la posición? –

+2

Haga un adaptador personalizado en este método GetView() escriba ImageView's onClick() .. Y haga lo que quiera ... – user370305

+0

@LalitPoptani Sí, pero ¿cómo sé que se hizo clic en ImageView? –

Respuesta

11

Para ImageView's Click Tiene que hacer un adaptador personalizado para su listview.

Y en el método getView() de adpater solo escriba , y comience su nueva actividad desde onClick() de esa imagen.

Por lista personalizada con tan sólo mirar a este tutorial Android Series: Custom ListView items and adapters ..

+0

Gracias de nuevo. Para los interesados ​​ver las preguntas principales comentarios para más información. Además, la respuesta de Arslan muestra la implementación del código muy similar a lo que terminé usando. –

+0

¿Cómo pasar un resultado de la nueva actividad? ¿Cómo usar onActivityResult() aquí? – Jas

+0

@Jas - use el método 'setResult()' establezca el Intento en él. y obtener esta intención en 'onActivityResult()'. Mira http://stackoverflow.com/questions/920306/sending-data-back-to-the-main-activity-in-android – user370305

1

verificación de este enlace a continuación se puede establecer el oyente para su imagen acoplamiento de la visión Se refiere esto y responder al mismo

Custom List View

21

En ti adaptador personalizado getView() método, cuando se está INIT la ImageView. Agregar posición como una etiqueta para la vista de imagen. De modo que cada vez que aparezca un nuevo ImageView mantendrá su posición en su etiqueta. Luego solo agregue el OnClickListener() en getView().

OnClickListener(View view) contiene la vista que hizo clic en usuario. Entonces, cuando el usuario haga clic en cualquier vista de imagen en la lista. Luego se pasará al OnClickListener(View view) como vista clicada. Y sabemos que nuestro ImageView contiene la posición como una etiqueta. ¿Entonces la etiqueta puede decirnos que esto es ImageView? posición. :)

@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; 
    } 

obtendrá el ImageView posición seleccionada.

+0

Gracias increíbles, esto es muy similar a mi código. –

4
 @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; 
     } 
0

En tres sencillos pasos:

1 En el método de adaptador getView (int posición, Ver convertView, ViewGroup padres):

ImageView imageview =(ImageView) convertView.findViewById(R.id.imageView); 
imageview.setTag(new Integer(position)); 

2 en layout.xml añadir el método onClick() en la ImageView

3 método implements onClick() y recupera el índice por view.getTag()

+0

Conozca el uso del formato en línea' \ 'como este \' '. Editaré tu pregunta –