2011-05-12 13 views
8

Tengo tres textviews en una fila de una vista de lista usando un adaptador personalizado y al hacer clic en la fila, deseo realizar el clic de la vista de texto seleccionada.Establecer evento de clic de elemento en setOnItemClickListener de listview Android

A continuación se muestra mi código de muestra para el evento click. Aquí en el primer clic, los oyentes se configuran y solo en el segundo clic se produce el evento de clic real, quiero encontrar esto en el primer clic. ¿Es posible?

listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapter, View view,  int pos, long id) { 

        final Order orderBooking = (Order)adapter.getItemAtPosition(pos); 

        // SKU listener 
        final TextView tvSkuId = (TextView) view.findViewById(orderBooking.getSelectedSkuId()); 
        tvSkuId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSkuClickListener(view, orderBooking); 
         } 
        }); 

        // SO listener 
        final TextView tvSoId = (TextView) view.findViewById(orderBooking.getSelectedSoId()); 
        tvSoId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSoClickListener(view, orderBooking); 
         } 
        }); 

        // OR listener 
        final TextView txtOrId = (TextView) view.findViewById(orderBooking.getSelectedOrId()); 
        //onOrClickListener(view, orderBooking); 
        txtOrId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onOrClickListener(view, orderBooking); 
         } 
        }); 
      } 
     }); 

Respuesta

6

¿Por qué no acaba de configurar esos clickListeners en el momento de la inicialización? Debería hacerlo en su Adaptador, cuando vincula sus datos a las vistas. Su código es incorrecto, porque inicializará sus vistas cada vez que el usuario haga clic en la fila de una lista.

+1

Sí, tiene razón, lo hice porque creé mi adaptador en una clase separada y no pude actualizar las vistas de actividad, ahora agregué el adaptador como una subclase y funciona perfectamente si configuro el oyente en el adaptador. muchas gracias. – Swarna

+0

De nada, muy contento de que mi respuesta lo haya ayudado. – Egor

0

Hágalo en su adaptador, en el método getview. Establezca un listador onclick para cada vista de texto.

@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 

    List<SectionObj> article = (List<SectionObj>) children.get(groupPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.listchildlayout_galleryview, null); 
    }  
    Gallery gallery = (Gallery) convertView.findViewById(R.id.customviewgallery); 
    gallery.setAdapter(new AddImgAdp(context, article, groupPosition)); 
    gallery.setOnItemClickListener(mOnGalleryClick); 

    return convertView; 
} 

private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 


    }  
}; 

Lo anterior es para una vista de galería. Haga lo mismo excepto que lo haga para una vista de texto

+0

Hola hades tienes razón ... si escribimos clicklistener para textview en listView.setOnItemClickListener primer elemento de la lista haz clickble después de esa vista de texto ... si escribimos en adapter..it directamente a textual textual ... gracias. – SBK

+0

Lo agregué en el método getView y funciona bien una vez que agregué el adaptador como una subclase. – Swarna

+0

@Swarna Adaptador adherido como una subclase a qué? Si necesita actualizar Activity o Fragment listviews puede llamar a notifyDataSetChanged() en el adaptador base 'que notifica a los observadores adjuntos que los datos subyacentes se han cambiado y que cualquier Vista que refleje el conjunto de datos debe actualizarse. – Arvis

Cuestiones relacionadas