2013-08-25 16 views
0

我做了一些Android的運動,我有一個小部件問題:安卓:配置部件(相同setOnClickPendingIntent不同的部件例如演員)

目標:當用戶添加新的插件增加至主該應用程序運行一個配置,用戶可以選擇一個字符串。 配置期間,必須將字符串設置爲我的窗口小部件佈局中唯一按鈕的「文本」,並且在該按鈕上,應用程序必須設置一個onclick監聽器,該監聽器將調用另一個將字符串作爲參數傳遞的活動。所以當用戶點擊按鈕時會調用給出按鈕文本的活動。主要目標是如果我有兩個小部件,每一個都設置onclick監聽器發送不同的字符串作爲參數。

代碼:

int mAppWidgetId = 0; 

if (extras != null) { 
    mAppWidgetId = extras.getInt(
    AppWidgetManager.EXTRA_APPWIDGET_ID, 
    AppWidgetManager.INVALID_APPWIDGET_ID); 
} 

String thestring = ... //this string is set dynamically by the configuration 


RemoteViews views = new RemoteViews(this.getPackageName(), R.widget_profile); 


    views.setTextViewText(R.id.buttonWidget, thestring); 


    Intent clickIntent = new Intent(this, afterclickactivity.class); 
    clickIntent.putExtra("TheString", thestring); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, clickIntent, 0); 
    views.setOnClickPendingIntent(R.id.buttonWidget, pendingIntent); 
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
    appWidgetManager.updateAppWidget(mAppWidgetId, views); 

問題:萬物似乎做工精細,小部件拿到主屏幕和按鈕上的文本的地方是一個由用戶時,如果choosen我根據用戶選擇添加2個具有不同文本的相同窗口小部件的實例。但是,當用戶按下第二個窗口小部件上的按鈕時,它將啓動「afterclickactivity」,它使用與widget1相同的參數忽略第二個選擇的字符串。

它是這樣的:

窗口小部件1: 文本:字符串1 的onclick:callActivity(字符串1)

窗口小部件2: 文本:字符串2 的onclick:callActivity(字符串1

回答

0

它是由Intents如何比較的方式造成的。 PendingIntent已在系統中註冊,並且當您嘗試添加另一個時,檢查與已經註冊的項目是否相等。 Contained Intent使用Intent.filterEquals進行比較,它檢查Intent的操作,數據,類型,類和類別。如果這些對於已經註冊的Intent和新的Intent是相同的,PendingIntent不會被重複。它要麼被替換或保留(取決於參數,您的選擇)。

請注意,臨時演員不在這裏比較。

因此,您需要以某種方式區分意圖,例如通過使用數據字段或請求代碼。

有關的PendingIntent查看文檔在這裏:http://developer.android.com/reference/android/app/PendingIntent.html

及相關文件關於意向本身

帕維爾

相關問題