本文轉自:http://blog.csdn.net/sunny2come/article/details/7194109
1.首先說說AppWidget ,Appwidget是什麼就不用多說了,項目需求是案頭工具(視窗小組件)裡面顯示的內容可以相應的增加,減少,即Widget裡麵包含ListView,顯示一行行的資料,不過可惜的是Android3.0之前的版本並不支援List等複雜控制項,要實現只有修改原始碼,並編譯,這樣支援List的Widget只能跑在自己的系統上了。
後來想了下,其實也可以不用Listview 來實現該需求的,既然Widget能顯示TextView,那麼就可以用TextView顯示一行一行的資料,再加上分頁按鈕也可以查看多條資料了。響應分頁按鈕點擊事件就可以進行上下頁的查看。
2.Widget的點擊事件要用到PendingIntent,因為Widget只是嵌入到主畫面的控制項,所以它的事件處理並不方便和簡單,Android3.0之前的版本只提供OnClick事件的響應,還得通過Pendingintent還實現。
即用方法: view.setOnClickPendingIntent(id, pi);
在這裡用PendingIntent遇到了一個問題,即有多個控制項(比如TextView)都響應Onclick事件,都發送PendingIntent,那麼如何區分這些Intent呢。
一開始用: PendingIntent pIntent5 = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT); 發現這樣執行個體化的PendingIntent,在Activity裡面擷取Intent時得到是最新的那麼Intent,即有的Intent不能傳過去。當然這裡情況是Intent啟動的Intent是同一個Activity,或者BroacastRecevier.
不過設定 PendingIntent pIntent5 = PendingIntent.getActivity(context, i, intent,
PendingIntent.FLAG_UPDATE_CURRENT); 的第二個值,即每個PendingIntent的第二個值不同,官方文檔說這個值沒有用好處,不過發現在這種情況貌似還是有用的。
3 .關於Activity的啟動模式。
Activity有四種啟動模式,不同情況要選擇不同的啟動模式。
程式中的情況是:接收到通知,通過Notification去啟動Activity,當然這裡也是要用到PendingIntent的。這之中遇到的問題是如果通過Notification已經啟動了該Activity,又來了Notifiaction,再點擊Notification啟動Activity,希望該Activity重新整理,擷取第二條Notification的資料,如果僅僅設定Activity的啟動模式為SingleTask,雖然Activity再啟動(調用OnResume()方法,不調用Oncreate方法),這樣得到Intent是上一個Notification的Intent,即Intent沒有重新整理。
要解決此問題需用到Activity中的方法OnNewIntent(),從字面就可以知道該方法的作用了,在Activity的OnResume方法中用OnNewIntent中的Intent就是最新的Intent的。