2016-07-29 12 views
0

Ich brauche eine Taste während einer onClick Aktion wie diese zu verstecken:Android - ausblenden Taste während einer onClick Aktion

Änderungen
public void onClick(View view) { 
    switch (view.getId()){ 
     case R.id.button1: 

      Button button2 = (Button) findViewById(R.id.button2); 
      button2.setVisibility(View.GONE); 

      //Some methods 
      //... 

      button2.setVisibility(View.VISIBLE); 

      break; 
    } 

Aber die Sichtbarkeit nach der onClick, nur das, was ich den Knopf zu verbergen tun könnte während der der onClick?

Dank

+1

Wenn Sie eine Schaltfläche/Ansicht ausblenden möchten, während der Benutzer auf eine andere Ansicht klickt, müssen Sie 'onTouchListener' anstelle von' onClickListener' implementieren –

+0

Ich möchte die Schaltfläche ausblenden, während " einige Methoden "werden ausgeführt. – Villat

Antwort

1

natürlich, weil Sie alle Betrieb im selben Thread ausgeführt werden Sie die Sichtbarkeit change feststellen können, versuchen Sie dies:

public void onClick(View view) { 
switch (view.getId()){ 
    case R.id.button1: 

     final button2 = (Button) findViewById(R.id.button2); 
     button2.setVisibility(View.GONE); 

     setVisibility(GONE); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       //your work 

       runOnUiThread(new Runnable() { //resetting the visibility of the button 
        @Override 
        public void run() { 
         //manipulating UI components from outside of the UI Thread require a call to runOnUiThread 
         button2.setVisibility(VISIBLE); 
        } 
       }); 
      } 
     }).start(); 

     break; 
} 
} 
+0

Das funktioniert! Eine weitere Frage, es gibt insgesamt 3 Threads, einen für die Sichtbarkeit auf GONE, andere für meine Arbeit und den letzten, um die Sichtbarkeit wieder einzustellen. Ist es möglich, das gleiche in 2 Threads zu tun? – Villat

+1

in Wirklichkeit gibt es nur 2 Thread, der UI-Thread und der zweite Thread für Ihre Arbeit, 'runOnUiThread' erstellt keinen neuen Thread, sondern einfach den Code innerhalb seiner' run'-Methode auf den UI-Thread. aus dem Dokument über 'runOnUiThread' Methode: _Läuft die angegebene Aktion auf dem UI-Thread. Wenn der aktuelle Thread der UI-Thread ist, wird die Aktion sofort ausgeführt. Wenn der aktuelle Thread nicht der UI-Thread ist, wird die Aktion in die Ereigniswarteschlange des UI-Threads gebucht._ –

0

Sie mögen unten versuchen können:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch(v.getId()){ 
    case R.id.button1: { 
     if(event.getAction() == MotionEvent.ACTION_DOWN){ 

      Button button2 = (Button) findViewById(R.id.button2); 
      button2.setVisibility(View.GONE); 

      return true; 
     } else if(event.getAction() == MotionEvent.ACTION_UP) { 

      // some methods 

      Button button2 = (Button) findViewById(R.id.button2); 
      button2.setVisibility(View.VISIBLE); 

      return true; 
     } 
    return false; 
    } 
}