2017-02-19 76 views
0

我有一個由兩個按鈕和圖像組成的小部件。我想這樣做,使用戶按下按鈕時,按鈕將被禁用30秒。這個效果如何實現?這是我的佈局:暫時禁用android widget按鈕

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/widget_margin" 
    android:background="#55000000"> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/bulb"/> 

    <Button 
     android:id="@+id/onButton" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="On" 
     android:background="@drawable/appwidget_dark_bg_clickable" 
     /> 

    <Button 
     android:id="@+id/offButton" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="Off" 
     android:background="@drawable/appwidget_dark_bg_clickable"/> 

</LinearLayout> 

這是我目前的控制器:

public class WidgetProvider extends AppWidgetProvider { 
    public static String ACTION_WIDGET_ON = "Lights turning on"; 
    public static String ACTION_WIDGET_OFF = "Lights turning off"; 
    private String serverUrl = //put your server URL here 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

     Intent active = new Intent(context, WidgetProvider.class); 
     active.setAction(ACTION_WIDGET_ON); 
     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.onButton, actionPendingIntent); 

     active = new Intent(context, WidgetProvider.class); 
     active.setAction(ACTION_WIDGET_OFF); 
     actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.offButton, actionPendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(ACTION_WIDGET_ON)) { 
      Log.i("onReceive", ACTION_WIDGET_ON); 
      new RestPostUtil().execute(serverUrl + "/lightsOn"); 
     } else if (intent.getAction().equals(ACTION_WIDGET_OFF)) { 
      Log.i("onReceive", ACTION_WIDGET_OFF); 
      new RestPostUtil().execute(serverUrl + "/lightsOff"); 
     } else { 
      super.onReceive(context, intent); 
     } 
    } 

} 

回答

0

嘗試import static java.lang.Thread.sleep;

然後用

try { 
sleep(3000); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
0

您將需要一個TimerrunOnUiThread到防止anr只是放TimeImMS和你很好去(ex 1000 = 1s)

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    button.setEnabled(false); 

    Timer buttonTimer = new Timer(); 
    buttonTimer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        button.setEnabled(true); 
       } 
      }); 
     } 
    }, TimeInMS); 
} 
});