我對Android應用小部件有點困惑。我明白我可以創建一個按鈕來啓動一個活動,但是我不知道如何創建一個按鈕來編輯小部件中的TextView文本。 有人能告訴我我錯過了什麼嗎?Android應用小部件 - 更改TextView內容的按鈕
非常感謝。
編輯: 我並不是說用戶輸入新文本,我的意思是應用程序自動更改文本,沒有任何UI(即對話框或活動)。
我對Android應用小部件有點困惑。我明白我可以創建一個按鈕來啓動一個活動,但是我不知道如何創建一個按鈕來編輯小部件中的TextView文本。 有人能告訴我我錯過了什麼嗎?Android應用小部件 - 更改TextView內容的按鈕
非常感謝。
編輯: 我並不是說用戶輸入新文本,我的意思是應用程序自動更改文本,沒有任何UI(即對話框或活動)。
編輯: OK,所以你設置一個getBroadcast的PendingIntent在您的按鈕與setOnClickPendingIntent,並執行更新(或致電您的更新方法)與接收器的新文本。您的AppWidgetProvider課程可以是您的接收器(您可以在onReceive中找到您的意圖),否則您將創建一個新課程,延伸到BroadcastReceiver。
EDIT2(示例代碼):
我沒有跑/編譯這段代碼,所以希望它不會有錯誤。 這是一個簡單的輔助方法來獲取自定義操作基本更新未決意圖:
public PendingIntent getRefreshPendingIntent(Context context, int appWidgetId){
Intent intent = new Intent("my.package.ACTION_UPDATE_WIDGET");
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
漁獲的onReceive自定義操作在重寫的AppWidgetProvider類
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
//handle other appwidget actions
if (intent.getAction().equals("my.package.ACTION_UPDATE_WIDGET")) {
//some code here that will update your widget
}
//handle other appwidget actions
}
您還需要添加自定義操作,以您的清單中appwidget接收機聲明
<receiver
android:name="my.package.MyWidgetProviderClass"
android:label="MyWidget">
<intent-filter>
<action android:name="my.package.ACTION_UPDATE_WIDGET"/>
<!-- other intent filters -->
</intent-filter>
<!-- meta data pointing to widget xml file -->
</receiver>
最後你應用掛起意圖的IntentFilter的您RemoteViews在任何你正在建設它,單擊該按鈕時,將發送my.package.ACTION_UPDATE_WIDGET行動時,這將是你的AppWidgetProvider,被抓在那裏你可以(或調用一個方法來)執行您AppWidget更新
當你點擊它myRemoteViews.setOnClickPendingIntent(R.id.id_of_update_button, getRefreshPendingIntent(context, appWidgetId);
此代碼更新微件,你可以對其進行編輯和修改監聽到你的按鈕:
public class MyWidgetProvider extends AppWidgetProvider {
private static final String ACTION_CLICK = "ACTION_CLICK";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Get all ids
ComponentName thisWidget = new ComponentName(context,
MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Log.w("WidgetExample", String.valueOf(number));
// Set the text
remoteViews.setTextViewText(R.id.update, String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}
完整的教程是here。
我不是指用戶更新文本,而是指應用程序在沒有任何UI(即對話框或活動)的情況下自動更改文本。我會編輯我的問題,以便更清楚。 – SZH 2012-08-12 01:23:14
好的,更新了我的答案 – roflharrison 2012-08-12 03:14:51
謝謝!你能否提供一些示例代碼? – SZH 2012-08-12 16:29:12