Buttons können nicht deaktiviert werden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Buttons können nicht deaktiviert werden

    Hallo,

    ich habe eine sehr simple App zur Ansteuerung von Relaismodulen über Bluetooth erstellt.
    Nach Betätigung des Buttons soll ein Relais 1s geschaltet bleiben und dann wieder abfallen.
    Soweit klappt das auch, aber während der 1s soll der Button nicht "clickable" sein.
    Das klappt leider nicht.

    Ich habe es auch mit ".disabled" probiert, gleiches Ergebnis.

    Hat jemand einen Tipp?

    Code s. Anhang
    Dateien
    • Code_snippet.txt

      (1,03 kB, 287 mal heruntergeladen, zuletzt: )
  • Kann es sein, dass das Loslassen (release) des Buttons das Sperren wieder aufhebt?
    nein das machst du ja selber in deinem Listener. In der letzten Zeile setzt du es ja wider true.
    Somit hast du es nur für wenige nanno sek False gesetzt.
    Benutze dazu einen Timer der nach einer Zeit es wieder auf true setzt. oder du benutzt einen zweiten Button zum wieder aktiv setzen.

    Quellcode

    1. Button bt = findViewById(R.id.button);
    2. bt.setOnClickListener((item)->{
    3. bt.setClickable(false);
    4. Timer t = new Timer();
    5. t.schedule(new TimerTask() {
    6. @Override
    7. public void run() {
    8. bt.setClickable(true);
    9. }
    10. }, 5000);
    11. });
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von nono124 ()

  • Hi nono124,

    grundsätzlich habe ich den Timer verstanden.
    In meinem code funzt es aber nicht.

    "
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:9745)
    at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:5213)
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:965)
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:965)
    "

    Ich habe es auch mit .postDelayed() versucht (s. Anhang), da funktioniert aber der OutputStream nicht.

    Mir fehlen womöglich einige grundlegende Zusammenhänge.

    Gibt es hierzu gute Beispiele?

    Grüße
    Joe
    Dateien
    • error.txt

      (1,07 kB, 94 mal heruntergeladen, zuletzt: )
  • Hallo,

    ich habe es gelöst.

    Die Zeitverzögerung mit .postDelayed()

    Das OutputStream-Problem mit einer Subroutine sendMessage(), s. code im Anhang.

    Viele Grüße
    Joe

    Java-Quellcode: code_snippet

    1. // Rel1 btn click
    2. mRel1Btn.setOnClickListener(new View.OnClickListener(){
    3. @Override
    4. public void onClick(View view) {
    5. if (mBlueAdapter.isEnabled()) {
    6. sendMessage(RELAY1_JDY30_ON);
    7. mRel1Btn.setEnabled(false);
    8. mRel1Btn.setClickable(false);
    9. new Handler().postDelayed(new Runnable()
    10. {
    11. public void run()
    12. {
    13. sendMessage(RELAY1_JDY30_OFF);
    14. mRel1Btn.setEnabled(true);
    15. mRel1Btn.setClickable(true);
    16. }
    17. }, 1000 //Specific time in milliseconds
    18. );
    19. }
    20. }
    21. });
    22. ...
    23. private void sendMessage(byte[] message) {
    24. OutputStream mOutputStream;
    25. try {
    26. mOutputStream = mBtSocket.getOutputStream();
    27. mOutputStream.write(message);
    28. } catch (IOException e) {
    29. e.printStackTrace();
    30. }
    31. }
    Alles anzeigen