Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android ListView之排序

Android ListView之排序

編輯:Android開發實例

本文主要講ListView排序問題,關於布局,請參考ListView之動態修改

單字段排序:

private ArrayList<Map<String, Object>> mArrayList;
private void getData() {

    //add Data.....

    //對ListView中數據list排序
    if (!mArrayList.isEmpty()){
        Collections.sort(mArrayList, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> object1, Map<String,
                Object> object2) {

            //根據字段"LEVEL"排序
                return object1.get("LEVEL").toString()
                    .compareTo(object2.get("LEVEL").toString());
            }
        });
    }

}

效果圖如下(LEVEL字段為圖片樣式):

如上圖如果這樣排你肯定不滿意。因為文本沒有排序。
多字段排序:

if (!mArrayList.isEmpty()) {
    Collections.sort(mArrayList, new Comparator<Map<String, Object>>() {
        @Override
        public int compare(Map<String, Object> object1,
            Map<String, Object> object2) {
            //我把obejct1 和obejct2寫倒了,這樣寫的用處就是反向排序。
            int i = object2.get("LEVEL").toString()</pre>
                            .compareTo(object1.get("LEVEL").toString());
            if (i == 0) {           //如果"LEVEL"字段相同,再根據下一字段排序
                 object1.get("TITLE").toString()

                    .compareTo(object2.get("TITLE").toString());
            }
            return i;
        }
   });
}

前後效果圖如下:

值得一提的是右邊圖片的樣式:

<!-- wifi_singal_open.xml -->
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
</level-list>

上面drawable是4種不帶鎖的圖片。

在wifi_singal.xml中引用wifi_signal_open和wifi_signal_lock文件:
 <!-- wifi_singal.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res/com.zkx.demo">
    <item settings:state_encrypted="true"
        android:drawable="@drawable/wifi_signal_lock" />
    <item settings:state_encrypted="false"
        android:drawable="@drawable/wifi_signal_open" />
</selector> 

settings:state_encrypted="true"為自定義屬性,在attr.xml中有配置:

 <resources> 
 <declare-styleable name="WifiEncryptionState">
        <attr name="state_encrypted" format="boolean" />
    </declare-styleable>
</resources> 

最後在Adapter getView中配置圖片文件:

 public static final int[] STATE_SECURED = {R.attr.state_encrypted};
public static final int[] STATE_NONE = {};
ImageView img = (ImageView)v.findViewById(R.id.img);
img.setImageResource(R.drawable.wifi_signal);
img.setImageLevel(Integer.valueOf(map.get("LEVEL").toString()));
//可見或不可見
int[] state = Boolean.valueOf(map.get("STATE").toString())
    ? STATE_SECURED : STATE_NONE;
img.setImageState(state, true); 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved