2016-11-16 4 views
0

Я разрабатываю программу в студии android. Я хочу, когда я нажму кнопку, тогда действие будет выполняться в одно и то же время. Функция: первый - Начало подсчета кликов второй - после 5 секунд, что кнопка отключенияДва действия onClick одна кнопка в то же время

setDelay = new Handler(); 

    btn = (Button) findViewById(R.id.bt); 

    final Button disableMe = (Button) findViewById(R.id.bt); 
    final TextView text = (TextView) findViewById(R.id.timeUp); 
    btn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      startDelay = new Runnable(){ 
       @Override 
       public void run(){ 
        text.setText("Time Up!"); 
        disableMe.setEnabled(false); 
       } 
      }; 
      setDelay.postDelayed(startDelay, 5000); 

     } 
    }); 


    txv = (TextView) findViewById(R.id.tx); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mCounter ++; 
      txv.setText(Integer.toString(mCounter)); 

     } 


    }); 
+0

То, что вы хотите достичь, это каждый раз, когда кнопка нажата, счетчик увеличивается на единицу, и после 5 секунд первого щелчка отключено? –

+0

Я ценю ваш ответ, но я не получаю его, вы можете дать мне полный код, который я прошёл, и он работает. Я хочу, чтобы одна кнопка нажала кнопку начала подсчета щелчка и через 5 секунд она была децибела, а также показала секундную стрелку вниз. – user3476090

ответ

0

Это может помочь

private int clicks = 0; 


button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     final Button b = (Button)v; 
     if (clicks == 0){ 
      // Means its the first time that a user click the button 
      // Start a thread that is going to disable the button after 5 seconds from first click 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Thread.sleep(5000); 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           b.setText("Time up"); 
           b.setEnabled(false); 
           // Showing user clicks after button is disabled 
           showClicks(); 
          } 
         }); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 
     // Here we are just counting . . . . including the first click 
     countClicks(); 
    } 
}); 

Граф щелкает метод

private void countClicks(){ 
     ++clicks; 
     // You can update your text view here 
} 

Показаны общее количество кликов

private void showClicks(){ 
     Toast.makeText(this, Integer.toString(clicks), Toast.LENGTH_SHORT).show(); 
} 
+0

Я ценю ваш ответ, но я не получаю вы можете дать мне полный код, который я прошёл, и он работает. Я хочу, чтобы одна кнопка нажала кнопку начала подсчета щелчка и через 5 секунд она была дебебезной, а также показала секундную стрелку – user3476090

+0

. Проверьте этот gist https://gist.github.com/Mtali/a1d42d19b4382130e81fbac8d9fcf45d –

+0

Большое вам спасибо. Можете ли вы сделать небольшую помощь. Когда я нажимаю кнопку, он подсчитывает щелчок, а также показывает подсчет И также показывает подсчет секунд отключения в течение 5 секунд, например, 1,2,3,4,5 – user3476090

0

создать новый список, как это:

ArrayList <View.OnClickListener> clickList = new ArrayList<>(); 

затем добавить все ваши Слушатель:

final Runnable startDelay; 
clickList.add(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      if (startDelay != null) 
       return; 
      startDelay = new Runnable(){ 
       @Override 
       public void run(){ 
        text.setText("Time Up!"); 
        disableMe.setEnabled(false); 
       } 
      }; 
      setDelay.postDelayed(startDelay, 5000); 
     } 
    }); 

clickList.add(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mCounter ++; 
      txv.setText(Integer.toString(mCounter)); 

     } 
    }); 

, то на вашей кнопке добавьте этот прослушиватель:

btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      for (View.OnClickListener c : clickList) 
       c.onClick(view); 
     } 
    }); 
+0

Здесь несколько кликов заставят несколько «Runnables» выполнить перед отключением, это неправильно ... –

+0

разрешен 'if (startDelay! = null) return; ', я не знаю, в чем смысл этого вопроса, но я попытался ответить на ** Два действия onClick одной кнопки в то же время ** –

0

Просто используйте boolean переменную сказать, если запускается отключить Runnable:

button.setOnClickListener(new View.OnClickListener() { 

      boolean disableRunnableStarted = false; 
      Runnable disableRunnable = new Runnable(){ 
       @Override 
       public void run(){ 
        //Running on UI thread to update button 
        MainActivity.this.runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          button.setEnabled(false); 
         } 
        }); 
       } 
      }; 
      @Override 
      public void onClick(View v) { 
       if(!disableRunnableStarted) { 
        Log.d(TAG,"Starting disable runnable and incrementing counter..."); 
        new Handler().postDelayed(disableRunnable,5000); 
        disableRunnableStarted = true; 

        //Here increment your counter 
       } else { 
        Log.d(TAG,"Just incrementing counter..."); 
        //Here increment your counter 
       } 
      } 
     }); 

Заменить MainActivity с именем ваши Activity «ы, если выполнение в FragmentgetActivity() заменить.

Смежные вопросы