2012-08-10 32 views
1

我對Android應用小部件有點困惑。我明白我可以創建一個按鈕來啓動一個活動,但是我不知道如何創建一個按鈕來編輯小部件中的TextView文本。 有人能告訴我我錯過了什麼嗎?Android應用小部件 - 更改TextView內容的按鈕

非常感謝。

編輯: 我並不是說用戶輸入新文本,我的意思是應用程序自動更改文本,沒有任何UI(即對話框或活動)。

回答

3

編輯: 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); 
+0

我不是指用戶更新文本,而是指應用程序在沒有任何UI(即對話框或活動)的情況下自動更改文本。我會編輯我的問題,以便更清楚。 – SZH 2012-08-12 01:23:14

+0

好的,更新了我的答案 – roflharrison 2012-08-12 03:14:51

+0

謝謝!你能否提供一些示例代碼? – SZH 2012-08-12 16:29:12

2

此代碼更新微件,你可以對其進行編輯和修改監聽到你的按鈕:

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