2016-07-29 4 views
0

мне нужно скрыть кнопку во время действия OnClick, как это:Android - Скрыть кнопку во время действия OnClick

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; 
    } 

Но изменения видимости только после OnClick, что я мог сделать, чтобы скрыть кнопку во время onClick?

Благодаря

+1

Если вы хотите скрыть кнопку/просмотр, когда пользователь нажимает на другое представление, вам нужно реализовать 'onTouchListener' вместо' onClickListener' –

+0

Я хочу скрыть кнопку, пока " некоторые методы ". – Villat

ответ

1

конечно, потому что вы выполняете все операции в том же потоке, вы можете заметить, что видимость changement, попробуйте следующее:

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

Это работает! Другой вопрос: всего 3 потока, один для настройки видимости GONE, другой - для моей работы, а последний - для повторной видимости. Можно ли сделать то же самое в 2 потоках? – Villat

+1

в действительности есть только 2 потока, поток пользовательского интерфейса и второй поток для вашей работы, 'runOnUiThread' не создает новый поток, а просто отправляет код внутри своего метода' run' в поток пользовательского интерфейса. из документа о методе 'runOnUiThread': _ Запускает указанное действие в потоке пользовательского интерфейса. Если текущий поток является потоком пользовательского интерфейса, то действие выполняется немедленно. Если текущий поток не является потоком пользовательского интерфейса, действие отправляется в очередь событий потока пользовательского интерфейса ._ –

0

Вы можете попробовать, как показано ниже:

@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; 
    } 
} 
Смежные вопросы