2015年12月7日 星期一

檢查參數內容是否是同一個物件實體?

假設物件A內有兩個參數,分別是字串B和長整數C。

物件A生成兩個實體參數,分別是實體一和實體二......

可以將實體一和實體二的B和C都設為同樣的數值內容,但如果用if(實體一 == 實體二)來檢查結果...

在Java中一定會得到false。

除非逐一針對B和C參數比對,不然永遠都會是false,──但這不是重點!



只要善用這個特性,可以輕鬆地完成「資料是否有更新」的比對。



最近碰到一個功能,(我保留了細節,只講大概,)要在Activity A中用網路去查詢資料,查詢完後將資料在Activity B鐘用列表(ListView)顯示,並且用彈出式視窗告知使用者「現在有幾筆資料」,然後在Activity C中可以看各筆資料的詳細內容.......並且重新設定查詢條件後再次查詢、查詢完後退回「上一頁(也就是Activity B)」。


用彈出式視窗告知使用者「現在有幾筆資料」是後來追加的功能,所以我設計的簡單,就是在Activity B的onResume中把列表的資料數顯示出來就是...

但問題是在Activity C中,使用者大部分只是單純的看完細節就退回Activity B,並不會重新設定查詢。

所以「判斷是否有重新設定查詢」仍是有必要的一件事。



方法很簡單。

資料要能跨三個Activity間傳遞並操作,方法就是使用一個static型態的ArrayList參數。

(在同一個APP中只要這樣做即可,Intent是很多餘的東西。)

每次只要有「查詢」,就會將這個static ArrayList參數重新產生一個實體。

然後在Activity B中設置一個物件類別專屬的ArrayList參數三,並在onResume中做if(實體一 == 實體二)的檢查,就可以快速精準地知道「使用者是否重新使用過查詢功能」。

(怕有人不知道:通常,將static ArrayList設為實體一,可以省去檢查實體二是否為null的動作。)



但如果ListView的Adapter直接使用參數三,這個方法「可能」會導致APP當機。

怕有人不知道......

安全的程序應該是再產生ArrayList參數四,然後用addAll()的方式將參數三內的資料全部倒進參數四中,然後再使用參數四來產生ListView的Adapter。

(資料量不要太誇張...一般來說這個動作是不吃什麼效能的。如果資料量很誇張,擔心記憶體,不要擔心效能。)

沒有留言:

張貼留言