2014-07-17 70 views
0

我做了一個按鈕,它會調用刷新方法:Android的 - 禁用按鈕仍然工作

... android:onClick="refresh" 

在我設置這些方法的開頭:

btn.setEnabled(false); 
btn.setClickable(false); 

而在最後,我設置啓用並可點擊true。 我的問題是,在程序運行並且按鈕被禁用的第一次點擊之後,我點擊了按鈕,例如3次。交易結束後,它會自動重新啓動3次。所以setEnabled(false)不起作用。 有人可以告訴我爲什麼嗎? Thx。

所以只有一個在我的佈局按鈕:

<Button   
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="50dp" 
    android:layout_gravity="center_horizontal" 
    android:onClick="refresh" 
    android:text="Refresh" 
    android:textStyle="bold" 

    android:background="@drawable/button" 
    /> 

這裏是方法:

public void refresh(View view){ 
    btn.setEnabled(false); 
    btn.setClickable(false); 

    final double currentLat = lat; 
    final double currentLng = lng; 

    if(isOnline == true) { 
     String link = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+currentLat+","+currentLng+"&sensor=true&language=hu"; 
     final GetLocation si = (GetLocation) new GetLocation(this, link).execute(); 

     Runnable runnable = new Runnable() { 
      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         Thread.currentThread(); 

         try { 
          Thread.sleep(3000); 

          if(si.getAddress() != null) { 
           address.setText(si.getAddress()); 
          }     
          String date = DateFormat.getDateTimeInstance().format(new Date()); 
          String data = date+": ["+currentLat+", "+currentLng+"] - "+si.getAddress()+"\n"; 

          FileManagement f = new FileManagement(filename); 
          f.writeToFile(data); 

          btn.setEnabled(true); 
          btn.setClickable(true); 

         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } catch (Exception e){ 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     }; 
     new Thread(runnable).start();   
    } 
} 
+0

當然,我不是Android的人,但這似乎是一個直截了當的問題。爲什麼downvotes? –

+4

向我們展示了更多代碼.... – JafarKhQ

+0

更改爲onclicklistener和plese顯示更多代碼 –

回答

0

我的建議是在你的代碼中使用onClickListener代替聲明

 android:onClick="refresh" 

如果聲明onClickListener,您將能夠在onClick事件被截獲時進行登錄;)

+1

爲什麼你可以使用onClickListener進行日誌記錄,並且你不能使用onClick xml標籤!!? – JafarKhQ

+0

在onClick方法中插入日誌會爲他提供關於何時截獲onClick事件的明確證據。我之所以這麼想,是因爲他的方法似乎排在隊列中,所以不清楚它們何時開始。 –

+0

您將通過記錄方法'刷新'來獲得相同的結果 – JafarKhQ

0

可能在您的應用程序中,主線程中的長任務阻止用戶界面,點擊事件後UI解鎖。

點擊按鈕後,你應該:

  1. 設置按鈕在其他線程禁用
  2. 運行操作 - 利用Thread類或的AsyncTask
  3. 運行後一整套按鈕使