2012-02-01 18 views
24

He conseguido poner en práctica una gran vista de lista que encontré aquí http://www.learn-android.com/2011/11/22/lots-of-lists-custom-adapter/comment-page-1/ pero me parece que no puede agregar un OnClickListener Sólo quiero ser capaz de hacer una acción al hacer clic en la fila, con los datos que la fila contiene por supuesto alguna idea? graciasAdición de una OnClickListener a vista de lista (androide)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.liste); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // Setup the list view 
    final ListView prestListView = (ListView) findViewById(R.id.list); 
    final prestationAdapterEco prestationAdapterEco = new prestationAdapterEco(this, R.layout.prestation); 

    prestListView.setAdapter(prestationAdapterEco); 

    // Populate the list, through the adapter 
    for(final prestationEco entry : getPrestations()) { 
     prestationAdapterEco.add(entry); 
    } 
    prestListView.setClickable(true); 
    prestListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      Object o = prestListView.getItemAtPosition(position); 
      String str=(String)o;//As you are using Default String Adapter 
      Toast.makeText(getApplicationContext(),str,Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+1

¿Qué está fallando, o cómo está fallando? ¿Ves comportamiento como http://stackoverflow.com/questions/4579754/listview-no-longer-reacts-to-onclick-after-a-call-to-setselection? –

+0

bloquea la aplicación cuando la ejecuto –

+1

carga la lista pero se cuelga cuando selecciono un artículo –

Respuesta

49
listView.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Object o = prestListView.getItemAtPosition(position); 
     prestationEco str = (prestationEco)o; //As you are using Default String Adapter 
     Toast.makeText(getBaseContext(),str.getTitle(),Toast.LENGTH_SHORT).show(); 
    } 
}); 
+1

eso es exactamente lo que probé, ¿cómo obtendría los detalles del elemento? –

+0

Siempre agrego un vector en mi vista de lista personalizada y para obtener datos, creo un nuevo objeto, por ejemplo, Object obj = (Object) Vector.get (position); –

+0

¿El vector es su lista de lista? –

7

Si su actividad se extiende ListActivity, sólo tiene que reemplazar el método OnListItemClick() así:

/** {@inheritDoc} */ 
@Override 
protected void onListItemClick(ListView l, View v, int pos, long id) { 
    super.onListItemClick(l, v, pos, id); 

    // TODO : Logic 
} 
+0

la vista de lista simplemente amplía la actividad, no la conectividad, http: //www.learn- android.com/2011/11/22/lots-of-lists-custom-adapter/comment-page-1/ –

+0

Para mí, en un ListFragment, esta era la ÚNICA forma de ponerme a trabajar en ClickClick. setOnItemClickListener simplemente no funciona. Supongo que lo mismo sería cierto para ListActivity. Consulte http://stackoverflow.com/questions/14080332/listfragment-onitemclicklistener-not-working – Dale

0

La (posición) prestListView.getItemAtPosition; devuelve el widget de interfaz de usuario: texto, icono, ...

probar este lugar:

Object o = prestationAdapterEco.getItemAtPosition(position); 

o

Object o = arg0.getItemAtPosition(position); 

obtener el objeto del adaptador. No de la vista de lista.

2. Objeto o es un objeto prestationEco. No es una cadena.

0

Usted está haciendo

Object o = prestListView.getItemAtPosition(position); 
String str=(String)o;//As you are using Default String Adapter 

El o que vuelvas no es una cadena, sino una prestationEco lo que obtener un CCE al hacer el (String)o

1
list.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
0

Prueba esto:

list.setOnItemSelectedListener(new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, 
      int arg2, long arg3) 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 

    } 
}); 
+1

Agregue siempre un comentario a su respuesta. –

Cuestiones relacionadas