讓收藏、點贊的即時狀態的互動正確的顯示在ListView上,listview
通過上面的兩張圖片能夠清楚的看到:收藏按鈕(五角星)、點贊按鈕(贊的數目);
在做項目的時候,這個時很常見的。先講解一下我的需求:
對於收藏:首先,這個具有收藏按鈕互動的頁面在整個項目中大約有13+個;若算上,選項標籤那就多的沒法數了,也就是說頁數基本上是不確定的;當點擊該收藏按鈕,會被點亮;再次點擊則恢複原狀態。中間在每次點擊,操作成功之後會向伺服器互動更新背景收藏狀態資料,便於下次進入時候保持收藏或者未收藏的狀態。
對於點贊;基本上和收藏是一樣的,只是多了贊的數量,要隨著點擊互動兒即時的改變贊的數字顯示;
然後,問題出現了!
首先,說listView的機制。listView如果在第一次進入該頁面而不讓listView一次載入你所請求的所有item,而是根據手機螢幕顯示的數量進行載入listView的item數量。當載入完第一版(手機螢幕所顯示的item)之後,你拖動listView向上滑動來顯示餘下的你所請求的item。那麼每顯示下一條adapter 中 的 getView();就會被調用一次來設定這條item的資料以及view展示。然後,如果你再次的把listView向下拖動來顯示listView的前幾條資訊,上面被遮擋隱藏的item每顯示一條,adapter 中的 getView();又會被重寫載入一次來設定該條item的資料以及view顯示;
所以,如果你使用一般的方式當你點擊收藏或者贊的按鈕之後,並且即時的設定了ta的狀態。當你遮蓋住ta之後,再次把他拖出來的時候,會經驚訝的發現“怎麼跟沒有做操作的時候狀態一模一樣?”。再則,這些肯定是在你本地進行的,不可能直接同步處理到後台然後在調用新的已經更改股狀態 的資料進行填充listView顯示;因為這樣太過於消耗手機記憶體了,而且每次互動都要重新載入頁面,重新請求資料,這樣深深的給使用者帶來了反感的體驗。估計隨即就把你的應用卸載了!然後,如果使用記住你的互動狀態的話,對於單獨頁面也可能會行得通,但是對於幾十個這樣的頁面,你要做多少重複多餘的代碼,估計你也能估算一下。還是太麻煩!
然後,這裡我就分享一下我搞弄了三天的能夠完美解決這種互動狀態一直延續下去並且能與後台伺服器同步的思路:
比如收藏的按鈕,當你點擊了收藏的按鈕並向後台提交了狀態之後。滑動listView之所以會出現bug,是因為此時沒有發生變化的就是你本地的狀態資料沒有改變。然後,你的listView就會載入設定過時的老資料顯示在listView 的 item上。所以,在listView無論社麼時候載入設定資料,在為了讓item顯示正確的內容,一定要保證本機資料和後台資料的一致性。而本地含有此狀態的資料一般有:包含該狀態的對象什麼的,也就是有:資料庫表、該類的bean類對象、adapter進行適配的該類的bean類對象等之類;然後當你點擊互動之後,向後台提交你的收藏狀態之後,就要隨即的更新你本地的所有的儲存了該收藏互動的狀態。這樣就同等於你的本機資料一直就與後台資料同步!然後,無論你怎麼滑動你的listView,ta都會載入設定正確的資料進行顯示!!
在winform中,怎做到一個按鈕,,點擊一下在listview顯示一組新資料,然後點一下listview顯示原來的資料
先迴圈添加值的某列,用下面這個方法。
listView1.Items.Add("List item text", 0);
相應按鈕的時候,先儲存舊資料,然後清空listview
listView1.Items.Clear();
再用Add方法添加新資料就可以了。
要迴圈改變新、舊資料,加個bool類型的變數,每次單擊後改變就可以了。
點擊treeview控制項的節點讓節點下的子節點裡邊的所有的資料顯示到listview上
正常的方式 你這塊 應該在 點擊事件裡 再取一次資料庫!~ 將資料取出來放到 你的ListView中。
或者 從你構造樹的 資料來源裡取
如果你 非要從樹上取,先取得當前節點(TreeViewItem),再 迴圈 TreeViewItem.Items ,取裡面的 TreeViewItem 就行了!