2017-02-23 76 views
3

我目前正在研究一個需要參與者在一段時間過去之前按下按鈕的研究的Android應用程序。如果他們在時間到了之前沒有按下按鈕,應用程序應該轉到下一個試用版。所有關於等待一段時間而能夠被中斷的答案都涉及到線程,而我沒有很高的經驗。這是我目前所擁有的:檢測在一段時間過去之前是否按下了按鈕

  final Long time = System.currentTimeMillis(); 
     end = time + timeAllowed; 

     //button click listeners 
     Log.d("Here", "ClickListener"); 
     low.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       response = 0; 
       end = (long)0; 
       Log.d("Clicked", "Clicked!"); 
      } 
     }); 
     high.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       response = 1; 
       end = (long)0; 
      } 
     }); 
     //actually waiting 
     //This is a really stupid hack 
     while(System.currentTimeMillis() < end) 
     {}//nothing happens yet 
     //timeAllowed has passed 
     responseTime = System.currentTimeMillis() - time; 

這是包含在48個試驗的循環中。出於某種原因,我的onClickListeners在for循環完成執行之前無法正確創建,即使我將它們放在for循環的開頭之上。另外,代碼無法標記在循環之後應該按下哪個按鈕(通過將button.setText設置爲顯示的代碼段之上來完成)。我可能會做錯什麼?

要完全清楚,我想等待按鈕按下或時間到期後再繼續。

科裏的迴應是我目前實施的。

我真的需要對此做出迴應。謝謝 請幫助。

回答

3

記錄按鈕首次顯示時的時間爲System.currentTimeMillis(),然後使用相同的方法獲取按鈕被點擊的時間。不同的是他們需要多長時間。

要記錄在一定時間內沒有發生的點擊,您可以使用該記錄,這會記錄在您的onResume中並記錄開始時間。

Handler handlerTimer = new Handler(); 

handlerTimer.postDelayed(new Runnable(){ 
    public void run() { 
     // do something    
    }}, 20000); 
+0

這似乎比我想要做的更簡單一些,但是如何知道什麼時候過去了,如果按鈕沒有被按下? –

+1

您可以將處理程序設置爲延遲發佈。編輯帖子以顯示。 –

相關問題