Android: onListItemClick in attività

Prima volta ho fatto una domanda qui ho imparato molto, quindi indovino che vale la pena di provarlo di nuovo.

Sto usando la list pigra da Fedor da questo collegamento: carico pigro di immagini in ListView

  • Come mostrare Google Map V2 su Android Emulator?
  • Disposizione di Android - problema di allineamento con ImageView
  • Schermata Android e Blocco Pattern
  • Regex di SpannableString in un ListView
  • Come fermare un'intenzione.ACTION_CALL una volta iniziata?
  • Casuale exception android.database.sqlite.SQLiteException: Imansible aprire il file di database
  • Funziona come un fascino. Ma, Fedor sta facendo la sua class principale estendere l' Activity invece di ListActivity . A causa di ciò, non sono più in grado di utilizzare un listener di listItemClick. Eclipse dichiara alcuni errori su onListItemClick() . Funziona quando mi rivolgo

      @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); // Intent launcher here } 

    in

      protected void onListItemClick(ListView l, View v, int position, long id) { // Intent launcher here } 

    Ma il lanciatore di intenti non funziona. Né una nota di brindisi.

    Quando giri l' Activity in ListActivity , Eclipse non si frena, ma il mio emulatore mi dà una forza vicina.

    Come ottengo

    • onListItemClick() clic su onListItemClick() nell'attività (preferibile)
    • O trasformo il codice in ListActivity senza forza chiusa?

    Grazie mille in anticipo.

  • Metodo che viene chiamato inutilmente?
  • Come mantenere SearchView espanso sul lato destro di ActionBar (durante l'utilizzo dell'icona personalizzata)?
  • Toggle gps sui dispositivi root su Android
  • Come verificare se il ricevitore è registrato in Android?
  • Come aggiungere frame personalizzati alle immagini in modo programmato
  • Come posso get la funzionalità di zoom per le immagini?
  • 8 Solutions collect form web for “Android: onListItemClick in attività”

    Scrivo la mia risposta come:

    1) il codice di @Falmarri ha bisogno di qualche aggiornamento
    2) La mia modifica suggerita è stata completamente respinta XD
    3) Stackoverflow non mi permette di scrivere un commento.

    Ecco il codice:

     ListView listView = (ListView) findViewById(R.id.my_listview_in_layout); listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ //Do stuff //... } }); 

    Riferimento: Secondo android.widget.AdapterView.OnItemClickListener , il metodo pubblico onItemClick () è il metodo invocato quando si fa clic su un elemento { invece di metodo protetto sconosciuto onListItemClick () }

    Un elencoItemClickListener è collegato ad un ListView . Quando hai cambiato ListActivity in Activity , la tua class non ha più una vista associata ad essa e quindi una class Activity non ha idea di cosa fare con un onListItemClickListener.

    Devi solo colbind un ascoltatore al tuo ListView :

     listview.setOnItemClickListener(new OnItemClickListener(){ @Override protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){ //Do stuff } }); 

    Ho lavorato su questo tutto il giorno e dopo aver fatto il mio ArrayAdapter non sono riuscito a capire come cambiare le classi nella mia list.

    Ecco come ho scoperto come farlo. Dopo che ho chiamato la mia matrix ho semplicemente terminato il mio codice in quel metodo facendo.

     ListView lv =getListView(); lv.setOnItemClickListener(this); 

    Poi dopo tutto il mio text ho messo

     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { String item = (String) getListAdapter().getItem(position); if (item.equals("Economy")) { Intent intent = new Intent(packages.this, economy.class); startActivity(intent); } else if (item.equals("Basic")) { Intent intent = new Intent(packages.this, basic.class); startActivity(intent); } else if (item.equals("Professional")) { Intent intent = new Intent(packages.this, professional.class); startActivity(intent); } else if (item.equals("Custom Applications")) { Intent intent = new Intent(packages.this, applications.class); startActivity(intent); } } 

    Tra io sono riuscito a personalizzare completamente il mio ListView con il carattere personalizzato e gli sfondi. Sono sicuro che una tonnellata di persone non mi import veramente. Ma sono output e speravo di aver postato questo per aiutare qualcuno in futuro.

    Per un non ListActivity per avere un ListActivity di un elemento cliccato per un ListView , devi call il setOnItemClickedListener() nel ListView (potrebbe essere necessario get tale findViewById() utilizzando findViewById() se viene da XML)

    Piuttosto che solo overriding ListActivity 's onListItemClickListener() , qui si avrebbe la tua AdapterView.onItemClickedListener() implementare AdapterView.onItemClickedListener() e passarlo come parametro a setOnItemClickedListener() .

    (Se si legge il codice sorgente di ListActivity (che consiglio), vedrai che esegue esattamente ciò che è dietro le scene creando un object interno di listener che chiama il tuo onListItemClick() ).

    Se state usando ListActivity allora vuoi fare qualcosa di simile:

     public class YourClass extends ListActivity implements OnItemClickListener{ @Override public void onCreate(Bundle icicle){ super.onCreate(icicle); setContentView(R.layout.your_layout); getListView().setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // your stuff here } } 

    Questo non è l'unico modo per impostare un OnItemClickListener . Guarda altre risposte. Questo è il modo in cui mi piace fare perché è più chiaro e più facile da leggere.

    FE.java

     package com.example.rfe; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class FE extends ListActivity { public List<String> d = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.file); d = new ArrayList<String>(); Scanner in = null; File f = new File("/sdcard/input.txt"); try { in = new Scanner(new FileReader(f)); while(in.hasNext()==true) { d.add(in.nextLine()); } }catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, d); setListAdapter(fileList); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { String selection = l.getItemAtPosition(position).toString(); Toast.makeText(this, selection, Toast.LENGTH_LONG).show(); super.onListItemClick(l, v, position, id); } } 

    Supponiamo di avere origine dati Frutta contiene poche stringhe. È ansible definire l' onCreate() come segue:

     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit, FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs 

    E poi scrivi l' onListItemClick() come segue:

     protected void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(this, " You selected " + FRUITS[position], Toast.LENGTH_SHORT).show(); } 

    Spero che funziona per te 🙂

    Ho aggiunto semplicemente seguito in onCreate() :

      listvview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { setPaymentDetails(); } }); 

    Fuori di onCreate() aggiunto setPaymentDetails() :

     protected void setPaymentDetails() { Intent intent = new Intent(this, SetPaymentDetailsActivity.class); startActivity(intent); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.