2011-12-23 21 views
32

Sto facendo di classe come come di seguitoCome posso impostare onClickListener su 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; 
     } 
    } 
} 

Sarà generare la lista, voglio chiamare rispettive attività sul rispettivo clic, come se l'utente clicca Transfer allora mostrerà l'attività di trasferimento, Come posso chiamare onClickListener su questo elenco e come posso avviare Attività al clic.

+0

vuoi impostare l'OnClickListener su ogni elemento della vostra ListView o per TextViews di ogni oggetto o cosa ?? – Houcine

+0

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

risposta

39

si può anche fare come questo ..

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

Posiziona questo direttamente sotto il punto in cui hai impostato l'adattatore su moreListView.setAdapter (listAdapter); – localhost

+0

Ottimo .. :) ha funzionato davvero bene ... grazie .. – Lal

1

Il tuo "More" classe ha per estendere ListActivity invece di attività, allora si può ignorare 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 
} 

Edit: dimenticato di dire, nel layout vostro ListView deve essere chiamato: android: id = "@ Android: id/lista"

+0

e come impostare onClick listener su ciascun elemento? –

+0

Ogni oggetto riceverà il clic. sai solo quale utilizzare la posizione dell'elemento selezionato, ad es. MoreItems [position] – Johann

+0

e dovremmo implementare onclicklistner o no? –

45

ci sono due possibilità di gestire eventi click per ciascun riga.

1) Se la classe estende ListActivity, è possibile eseguire l'override del metodo seguente.

@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) Gestire clicca caso di fila in getView() metodo

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - per considerare entrambi gli scenari .. !! –

+0

Il secondo metodo si arresta in modo anomalo dopo onclik sull'elemento di ricerca/aggiornato nella visualizzazione elenco mentre si chiama l'intenzione all'interno del metodo onclick! qualsiasi soluzione per questo? .. il problema arriva quando usiamo il nostro filtro di ricerca. –

+0

@Subra Senza un codice nessuno può capire il tuo problema. Meglio fai una nuova domanda con il codice necessario. – Dharmendra

10

Ad esempio:

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); 
      } 
      }); 
Problemi correlati