PendingIntent 傳 intent 問題

本文轉自: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的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章