evento di incendio della spina android quando la stessa selezione degli oggetti viene fatta

Voglio sparare un evento quando lo stesso elemento viene selezionato in filettatura. Metodo

@Override public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) { } 

viene chiamato solo quando viene effettuata una selezione diversa. Il mio scopo è quello di visualizzare un toast quando viene selezionato qualsiasi elemento o la stessa voce viene ristabilita o è stata effettuata una selezione diversa.

  • valori di default di android per le preferenze condivise
  • Come evitare un errore di memory durante l'utilizzo di bitmap in Android
  • JSONException: Il valore del tipo java.lang.String non può essere convertito in JSONArray
  • Indexoutofboundsexception con listview
  • Android BLE non può ricevere notifica Gatt caratteristica dal dispositivo
  • Come aggiornare la tabella con activeandroid dopo aver aggiunto una nuova colonna
  •  @Override public void onNothingSelected(AdapterView<?> parent) { } 

    sopra il metodo non risolve il mio problema.

  • come chiudere / smettere di eseguire l'applicazione sullo background android
  • Perché utilizzare ContentProvider.getType () per get il tipo MIME?
  • query di cancellazione sqlite android non funzionante
  • Il servizio Android si blocca dopo l'applicazione viene eliminato dall'elenco delle applicazioni recenti
  • Panoramica sull'orientamento del telefono Android, compresa la bussola
  • Accessibilità e Android WebView
  • 5 Solutions collect form web for “evento di incendio della spina android quando la stessa selezione degli oggetti viene fatta”

    utilizzare l'ascoltatore di clic per soddisfare il requisito. come ascoltatore diretto su spinner non è supportto in modo da rendere una class estendere spinner e ride oltre metodo click e in questo metodo fare quello che si desidera fare.

    ho scoperto che la vecchia selezione viene mantenuta alla variabile chiamata mOldSelectedPosition nella gerarchia del filatore. Spinner utilizza questo valore per verificare se lo stesso elemento è stato selezionato o less, e se è lo stesso, ignora. Se non vogliamo ignorare ciò che ho fatto è un codice sporco utilizzando la riflessione.

     package com.aradiom.amc.nativecomponents; import java.lang.reflect.Field; import android.content.Context; import android.util.Log; import android.widget.Spinner; public class SpinnerTrigger extends Spinner { public SpinnerTrigger(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public void setSelection(int position, boolean animate) { ignoreOldSelectionByReflection(); super.setSelection(position, animate); } private void ignoreOldSelectionByReflection() { try { Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass(); Field reqField = c.getDeclaredField("mOldSelectedPosition"); reqField.setAccessible(true); reqField.setInt(this, -1); } catch (Exception e) { Log.d("Exception Private", "ex", e); // TODO: handle exception } } @Override public void setSelection(int position) { ignoreOldSelectionByReflection(); super.setSelection(position); } } 

    Questa class annulla sempre il valore di vecchia selezione, in modo che each volta che si verifichi l'evento di clic. Può non essere una soluzione perfetta. Usare con caucanvas. 🙂

    Speriamo che questo aiuto. Ho provato e funziona

     /** Spinner extension that calls onItemSelected even when the selection is the same as its previous value */ public class NDSpinner extends Spinner { public NDSpinner(Context context) { super(context); } public NDSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public NDSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setSelection(int position, boolean animate) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position, animate); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } @Override public void setSelection(int position) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } } 

    Poiché la mia reputazione non è abbastanza elevata da commentare direttamente sulla risposta di @Suat, ho provato questo metodo, funziona come fascino, ma non sono chiaro quali effetti collaterali potrebbero essere. Qualcosa che voglio aggiungere è che altri costruttori dovrebbero essere aggiunti per evitare errori.

     public SpinnerTrigger(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public SpinnerTrigger(Context context, AttributeSet attrs){ super(context,attrs); 

    }

    È ansible aggiungere un nome di metodo al METODO selezionato

     Spinner `Spinner1`=(Spinner)findViewById(R.id.`declareid`) 

    oBject è stato dichiarato per spinner

      @Override public void onItemSelected(AdapterView<?> parent, View arg1, int position, long arg3) { ItemOnChange(); } private void ItemOnChange() { if(Spinner1.getSelectedItemPosition()>0){ pd=ProgressDialog.show(this,"","Loading, Please wait .. ",true); final int spinner=Spinner1.getSelectedItemPosition(); final Handler ThreadCallback=new Handler(); final Runnable runInCityThread=new Runnable(){ public void run(){ fnBindspimmer2(); pd.dismiss(); } }; new Thread(){ @Override public void run(){ Spinner2values(); ThreadCallback.post(runInCityThread); } }.start(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.