2011-04-05 59 views
0

我有以下代碼在檢測到onTap事件後啓動活動。Android onTap start活動

問題是,更多的時候,它會檢測到一個用戶只需按下2-3個按鍵,因此會啓動多個按鍵。有什麼辦法可以抑制效果,只打開一次?

protected boolean onTap(int i) { 

      Log.i("TAP","CALLED"); 


      myOverlayItem item =getItem(i); 

      if (selectedName.equals(item.getTitle())){ 


       try{  
       Intent myIntent = new Intent(AppMain.this, DetailActivity.class); 
       myIntent.putExtra("int", i); 
       myIntent.putExtra("string", selectedName); 
       AppMain.this.startActivity(myIntent); 
       }catch (Exception e){ 
        Log.e("Error", "Cannot launch", e); 
       } 
      } 
} 

謝謝!

回答

1

嘗試一個布爾值設置爲true,所以你可以確保代碼只運行一次

boolean activityIsAlreadyRunning; 


if(activityIsAlreadyRunning == false){ 
    if (selectedName.equals(item.getTitle())){ 
     try{  
      Intent myIntent = new Intent(AppMain.this, DetailActivity.class); 
      myIntent.putExtra("int", i); 
      myIntent.putExtra("string", selectedName); 
      AppMain.this.startActivity(myIntent); 

      activityIsAlreadyRunning = true; 

      }catch (Exception e){ 
       Log.e("Error", "Cannot launch", e); 
      } 
    } 
} 
0

爲什麼你就不能發出onClickListener?點擊這個按鈕就會啓動一次。另一種可能的解決方案可能是簡單地在父類中設置一個公共布爾變量,並且當您的函數啓動時只需設置isRunning = true;並在其完成之前即可設置isRunning = false;。這將允許你包住事件的啓動塊中的這樣:

if (!isRunning){ 
    onTap(integer); 
} 

這將使這樣的方法不是在觸摸運行,除非它不是目前已在運行。如果這沒有幫助,您可以隨時比較您的觸摸事件event.x & event.yevent.getEventTime()中的差異。然後,它可以看看你的onTouchEvent內是這樣的:

if ((Math.abs(event.x - mLastEventX) > 2.0f) || 
     (Math.abs(event.y - mLastEventY) > 2.0f) || 
      ((event.getEventTime() - mLastEventTime) > 500f)){ 
    onTap(integer); 
} 

這基本上使它所以它不會發動任何除非以下是真實的:

  • ((Math.abs(event.x - mLastEventX) > 2.0f)或X值變化超過2
  • (Math.abs(event.y - mLastEventY) > 2.0f)或Y值變化超過2
  • ((event.getEventTime() - mLastEventTime) > 500f)或時間增加了500毫秒時間

沒有關於您要完成什麼的更多信息,我很難爲您提供適合您的解決方案。如果這些工作都不起作用,請嘗試putExtras/getExtras,其中涉及使用意圖在整個活動開始和結束時放置和獲取信息。

1

您還可以嘗試閱讀android:launchMode。這是如何通過單個或多個實例啓動您的活動。

+0

這也太好了! – 2011-04-05 07:43:42