Aumenta continuamente il valore integer come viene premuto il button

Sono nuovo per Android e mi dispiace se la domanda è facile da rispondere. Ho due pulsanti, una diminuzione e un button di aumento, e nel mezzo di loro un TextView che visualizza un valore.

Quando ho premuto il button di diminuzione, il valore in TextView diminuisce e aumenta quando ho colpito il button di aumento, senza problemi, ho funzionato ma il problema è che il valore aumenta / diminuisce di 1 su un solo clic. Quello che sto cercando di realizzare è che mentre continuo a premere il button (ad esempio il button di incremento), il valore aumenta continuamente e si arresta solo quando rilascio il button di aumento.

  • Stringa all'object data / ora in Android
  • Android Studio Gradle crea un errore durante l'aggiunta di Facebook SDK
  • come posso impostare i livelli massimi e minimi di zoom per l'image in android?
  • Come visualizzare l'image nel TextView di Android?
  • come impostare i dati analizzati da json in una listview e quindi aggiungere funzionalità di ricerca in esso
  • LocationClient vs LocationManager
  • È ansible? In caso affermativo, puoi mostrare alcuni codici di esempio o riferimenti su come implementarla? Grazie!

    Ecco il mio main.xml

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="44dp" android:gravity="center_horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="&lt;" /> <TextView android:id="@+id/textView1" android:layout_width="50dp" android:layout_height="fill_parent" android:layout_alignBottom="@+id/button1" android:layout_toRightOf="@+id/button1" android:gravity="center" android:text="45" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/textView1" android:text="&gt;" /> </RelativeLayout> </RelativeLayout> 

    e qui è il mio Main.java

     import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { private Button _decrease; private Button _increase; private TextView _value; private static int _counter = 45; private String _stringVal; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _decrease = (Button) findViewById(R.id.button1); _increase = (Button) findViewById(R.id.button2); _value = (TextView) findViewById(R.id.textView1); _decrease.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("src", "Decreasing value..."); _counter--; _stringVal = Integer.toString(_counter); _value.setText(_stringVal); } }); _increase.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("src", "Increasing value..."); _counter++; _stringVal = Integer.toString(_counter); _value.setText(_stringVal); } }); } } 

  • Progressbar analogico con asyncTask
  • Android - Come visualizzare il file con più bambini con diverse altezze
  • Come aggiungere un SearchWidget all'ActionBar?
  • Android apre la camera dal button
  • Non counterattabile di Google fit di Google cheatable
  • ORMLite Problema con l'inserimento di tabelle da un database a un altro database su Android
  • 3 Solutions collect form web for “Aumenta continuamente il valore integer come viene premuto il button”

    Per far funzionare, è necessario un thread che aggiorna il valore integer quando si preme lungo un button.

    Crea un gestore nella tua attività:

     private Handler repeatUpdateHandler = new Handler(); 

    E 2 arm che affermerà: è incremento o decremento? Solo un set alla volta.

     private boolean mAutoIncrement = false; private boolean mAutoDecrement = false; 

    E il valore attuale del numero

     public int mValue; 

    E una class che verrà eseguita in un altro thread:

     class RptUpdater implements Runnable { public void run() { if( mAutoIncrement ){ increment(); repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY ); } else if( mAutoDecrement ){ decrement(); repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY ); } } } 

    Aggiunta di un lungo listener di printing al tuo button:

     mBTIncrement.setOnLongClickListener( new View.OnLongClickListener(){ public boolean onLongClick(View arg0) { mAutoIncrement = true; repeatUpdateHandler.post( new RptUpdater() ); return false; } } ); mBTIncrement.setOnTouchListener( new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) && mAutoIncrement ){ mAutoIncrement = false; } return false; } }); 

    Nel caso precedente il button è l'incremento uno. Crea un altro button che imposta il mAutoDecrement su true.

    E decrement () sarà una function che imposta la variabile di istanza di istanza come questa:

     public void decrement(){ mValue--; _value.setText( ""+mValue ); } 

    Cifre l'incremento. Oh e REP_DELAY è una variabile int statica impostata su 50.

    Vedo che si tratta di un estratto di Open Source NumberPicker di Jeffrey Cole disponibile all'indirizzo http://www.technologichron.net/ L'attribuzione di un autore appropriato deve essere aggiunta.

    Il mio modo per incrementare il valore a lungo click è quello di utilizzare Timer utilizzato per verificare periodicamente se il button è ancora premuto e che aumentare il valore, altrimenti annullare il timer. Per aggiornare l'utilizzo dell'utilizzatore UI.

     vh.bttAdd.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if(vh.bttAdd.isPressed()) { final int track = ((ChannelAudioTrack) channels.get(vh.getAdapterPosition())).goToNextTrack(); updateUI(vh,track); } else timer.cancel(); } },100,200); return true; } }); 

    handler:

     private void updateUI(final TrackViewHolder vh, final int track) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { vh.tvTrackNumber.setText(Integer.toString(track)); } }) ; } 

    Sono tardi per rispondere a questa domanda ma può aiutare chiunque sia alla ricerca di una risposta migliore.

    Ho creato una class CounterHandler e la sua insanamente facile da usare per get la funzionalità di contatore continua sopra indicata.

    Puoi trovare la class nel seguente concetto con un esempio di "come utilizzare". https://gist.github.com/nomanr/d142f4ccaf55ceba22e7f7122b55b9b6

    Codice di esempio

      new CounterHandler.Builder() .incrementalView(buttonPlus) .decrementalView(buttonMinus) .minRange(-50) // cant go any less than -50 .maxRange(50) // cant go any further than 50 .isCycle(true) // 49,50,-50,-49 and so on .counterDelay(200) // speed of counter .counterStep(2) // steps eg 0,2,4,6... .listener(this) // to listen counter results and show them in app .build(); 

    È tutto. 🙂

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.