安卓如何?list的全選效果,安卓list全選
背景:在做“購物車”和“我的關注清單”、“收貨地址”這一類列表問題時,往往UI設計師會將外層Activity添加一個“全選”功能的checkbox(姑且叫他父checkbox),而子checkbox則存在於列表的每一個項,即listitem,而listitem往往寫在一個adapter中。如何完成內外層,即內層adapter和外層Activity的傳遞呢?
外層Activity向內層adapter傳遞:
在本例中,需要實現的是外層Activity的父checkbox控制項勾選後,將內層adapter中所有item的子checkbox全部標記為勾選狀態。怎麼做?首先在adapter中寫一個chooseAll(boolean flag)的函數,而後在外層Activity調用。函數的內容即是遍曆所有子項依次修改每一個子checkbox。最後不要忘記在函數裡notifyDatasetChanged,來重新整理adapter。
內層adapter向外層Activity傳遞:
嚴格上講,adapter是無法控制外層Activity的,Activity可以調用adapter的函數,控制重新整理等,內層adapter則完全無法控制外層Activity的載入。在這裡我也是用了一種比較取巧的方法,來解決我面臨的切實問題。在本例中,我需要做的就是根據內層adapter的子項item的子checkbox的情況來修改外層checkbox,即如果點擊最後一個未選中的複選框之後,外層checkbox需要相應的變成選中狀態。由於不方便開全域變數,甚至是開線程隨時監聽,所以就用了取巧的方式,將外層Activity的context作為adapter建構函式的參數傳遞進來,然後通過context獲得父checkbox,在adapter選中最後一項後相應把該checkbox修改掉。如何通過context獲得外部控制項?利用了下面這句強制轉型。
adapter.this.chooseAllImg = (ImageView) ((Activity)mContext).findViewById(R.id.chooseAll);
這樣,adapter通過修改這個Img就可以達到修改外層Img的效果了,因為內外層Img都指向了同一個資源檔,即R.id.chooseAll。
問題又出現了:
這隻是修改了外層Activity中checkbox的樣子,邏輯上沒有修改。如果一開始外層Activity全選flag為假,然後子項依次選中直至全部選中,這時adapter會修改外層Activity的checkbox圖片,改為選中的圖片,但是Activity本身局部變數 —— 全選flag仍然是假,因為adapter是無法通過context獲得Activity的局部變數的。如果Activity接下來需要通過這個flag做一些判斷,那邏輯上就走不通了,明明看起來是全部選中的圖片,但是flag卻依然寫的是假。所以我的對策是:Activity不要用這個flag。用什麼呢?唯一能保持通訊的就是這個小小的checkbox Img,而取巧的是安卓的控制項都可以實現一個叫Tag的東西,與每一個控制項綁定。那麼,我只要將Img的Tag設定為真假來代替這個flag就可以了。Tag怎麼設定?很簡單,只需要在內層全選情況成立時,setTag(true),而後在外層用到flag時,getTag(),就可以了。當然getTag需要轉為Boolean類型。
怎在List清單控制項中實現全選(ctrl+a)功可以解答
判斷焦點是否在List清單控制項上,
如果是,則可以通過設定所有項都高亮來表示選中所有項。
而如果你不只是為了這樣簡單的視覺效果,還需要做其他動作的話,
那你就要自己另行處理。
按sz_04022說法就可以,你只需要,當焦點在list列表時,對鍵盤的ctrl + a訊息進行處理,這個時候就使list列表中的項目進行全選的.
Android 中的ListView被選中項的背景怎更改?
完全可以實現,這用到了Android的Selector(根據組件的狀態顯示該狀態對應的圖片做為顯示背景)。
把下面的XML檔案儲存成你自己命名的.xml檔案(比如list_bg.xml),注意,這個檔案相當於一個背景圖片選取器,在系統使用時根據ListView中的清單項目的狀態來使用相應的背景圖片,什麼情況使用什麼圖片我在下面都進行了說明。還有,你可以把它看成是一個圖片來使用,放於drawable目錄下,配置背景屬性android:background="@drawable/list_bg"就能達到你需要的目的了。
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="schemas.android.com/apk/res/android">
<item android:state_window_focused="false"
android:drawable="@drawable/沒有焦點時的圖片背景" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable=
"@drawable/非觸摸模式下獲得焦點並單擊時的背景圖片" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/觸摸模式下單擊時的背景圖片" />
<item android:state_selected="true"
android:drawable="@drawable/選中時的圖片背景" />
<item android:state_focused="true"
android:drawable="@drawable/獲得焦點時的圖片背景" />
</selector>
----------------------------------------------------------------
你可以看下原始碼ListView清單項目背景的預設實現
SDK目錄\tools\lib\res\default\drawable\list_selector_background.xml,我也是根據他來改自己需要的效果。希望對你有用。......餘下全文>>