2010-04-15 76 views
4

我在appwidget上有一個按鈕,需要通過服務以編程方式「啓用」/「禁用」。如何以編程方式禁用Android上的onClick處理程序AppWidget按鈕

第一個想法是致電setBoolean(R.id.buttonid, "setClickable", false)來禁用它,但顯然你不能遠程調用setClickable

另一個想法是用rv.setTextViewText(R.id.buttonid, "")從中刪除文本標籤,然後刪除點擊處理程序rv.setOnClickPendingIntent(R.id.buttonid, null)。不幸的是,通過null它導致NullPointerException in android.app.ActivityThread.handleServiceArgs

是否有一些其他方式來以編程方式禁用/啓用appwidget按鈕?我可以撥打rv.setViewVisibility(R.id.buttonid, View.GONE)來完全隱藏按鈕,而不是禁用它。然而,這將完全打破整個小部件佈局,我想避免它。

我現在使用的解決方案是隱藏按鈕setViewVisibility,並顯示其他空白按鈕,而不是像以前一樣保留appwidget佈局。

回答

5

當你創建你的RemoteViews實例時,你提供了一個佈局。當您想禁用該按鈕時,請在該按鈕上選擇android:enabled="false"的佈局。

或者,您可以使用setOnClickPendingIntent()並提供一個不會去任何地方的Intent(例如,針對沒有人使用的操作的廣播Intent)。

4

基本上我有同樣的問題,但要做到這一點完全編程,所以我們只是傳遞布爾值setBoolean()功能:

remoteViews.setBoolean(R.id.imageButton1, "setEnabled", false); 

不要忘記告訴Android的更新主屏幕:

RemoteViews remoteViews = new RemoteViews(context.getResources().getText(R.string.package_name).toString(), R.layout.your_layout); 
    ComponentName thisWidget = new ComponentName(context, Widget.class); 
    AppWidgetManager manager = AppWidgetManager.getInstance(context); 
    manager.updateAppWidget(thisWidget, remoteViews); 
相關問題