2011-12-23 12 views
32

estoy haciendo clase como la siguiente¿Cómo puedo configurar onClickListener en ArrayAdapter?

// All necessary imports are here 

public class More extends Activity { 

    String[] MoreItems = { "Transfers", "Budgets", "Branches", "Tools", "News", 
      "Customer Service", "Settings", "Help", "About" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.more_view); 

     ListView moreListView = (ListView) findViewById(R.id.moreListView); 
     MoreListAdapter listAdapter = new MoreListAdapter(); 
     moreListView.setAdapter(listAdapter); 

     // accountsTypeListView.setOnItemClickListener(listClickListner); 
    } 

    class MoreListAdapter extends ArrayAdapter<String> { 
     MoreListAdapter() { 
      super(More.this, R.layout.list_item, MoreItems); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View row; 

      if (convertView == null) { 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.list_item, parent, false); 
      } else { 
       row = convertView; 
      } 
      TextView tv = (TextView) row.findViewById(R.id.textItem); 

      tv.setText(getItem(position)); 

      return row; 
     } 
    } 
} 

Se generará la lista, quiero llamar a las actividades respectivas en los respectivos clic, como si la transferencia usuario haga clic a continuación, se mostrará la transferencia de actividades, ¿Cómo puedo llamar onClickListener en esta lista y cómo puedo iniciar Activity on click.

+0

qué quiere establecer el OnClickListener en cada artículo de su ListView o para TextViews de cada artículo o qué? – Houcine

+0

row.setOnClickListener (this); ..... startActivity (esto, someIntent); – Blundell

Respuesta

39

también se puede hacer como esto ..

moreListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Log.d("############","Items " + MoreItems[arg2]); 
      } 

     }); 
+2

Coloque esto directamente debajo de donde ha configurado el adaptador en moreListView.setAdapter (listAdapter); – localhost

+0

Genial ... :) funcionó muy bien ... gracias ... – Lal

1

Su clase "Más" tiene que extender ListActivity en lugar de la actividad, a continuación, se puede anular onListItemClick

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the arrya 
} 

Editar: Olvidé decir, en el diseño de su ListView tiene que ser llamado: android: Identificación = "@ android: Identificación/lista de"

+0

y cómo configurar el oyente ¿Hacer clic en cada elemento? –

+0

Cada artículo recibirá el clic. simplemente sabe cuál usa la posición del elemento cliqueado, p. ej. ¿Más Items [posición] – Johann

+0

y deberíamos implementar onclicklistner o no? –

45

Hay dos opciones para manejar evento Click para cada fila.

1) Si su clase se extiende ListActivity, puede anular el siguiente método.

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the array 
} 

2) Manejar haga clic en caso de fila en getView() método

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - por considerar ambos escenarios ... !! –

+0

¡El segundo método se bloquea después de onclik en el elemento buscado/actualizado en la vista de lista mientras se realiza la llamada dentro del método onclick! ¿Alguna solución para eso? ... el problema viene cuando usamos nuestro propio filtro de búsqueda. –

+0

@Subra Sin un código nadie puede entender su problema. Mejor haces una nueva pregunta con el código necesario. – Dharmendra

10

Por ejemplo:

ListView lv = getListView(); 

     lv.setAdapter(listAdapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 

       Intent i = new Intent(More.this, NextActvity.class); 
       //If you wanna send any data to nextActicity.class you can use 
       i.putExtra(String key, value.get(position)); 

      startActivity(i); 
      } 
      }); 
Cuestiones relacionadas