Android Wifi 列表ListView排序

简介:

先补充:Android ListView之动态修改

MyAdapter 类:
package com.android.test;
import java.util.ArrayList;
import java.util.Map;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {
    private ListMain main;
    private ArrayList<Map<String, Object>> list;
    public MyAdapter(ListMain main, ArrayList<Map<String, Object>> list) {
        this.main = main;
        this.list = list;
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
       return list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //如果未选择或list列表为空时直接跳出,避免NullPointException
        if (position < 0 || list.size() <= 0) {
            return null;
        }
        //如果为空重新导入ListView的布局文件,布局文件自定义
        if (convertView == null) {
            convertView = LayoutInflater.from(main).inflate(R.layout.list1, null);
        }
        //实例化
        ImageView img = (ImageView)convertView.findViewById(R.id.list1_img_icon);
        TextView tv1 = (TextView)convertView.findViewById(R.id.list1_tv1);
        TextView tv2 = (TextView)convertView.findViewById(R.id.list1_tv2);
        //获取参数
        Map<String, Object> map = list.get(position);
        tv1.setText((String)map.get("TITLE"));
        tv2.setText((String)map.get("CONTENT"));
        //修改样式
        if (main.getStatus(position) == ListMain.LIST_SELECT) {
            convertView.setBackgroundColor(Color.parseColor("#003D79"));
            img.setBackgroundResource(R.drawable.ic_settings_personalize);
            tv1.setTextColor(Color.BLUE);
            tv1.setShadowLayer(1, 1, 0.75f, Color.WHITE);
        } else {
            convertView.setBackgroundColor(Color.BLACK);
            img.setBackgroundResource(Integer.valueOf(map.get("IMG").toString()));
            tv1.setTextColor(Color.WHITE);
            tv1.setShadowLayer(1, 1, 0.75f, Color.CYAN);
        }
    return convertView;
    }
}

在ListMain中,插入一个ArrayList<Map<String, Object>>

ArrayList<Map<String, Object>> list;
list = new ArrayList<Map<String,Object>>();
for (int i = 0; i < TITLE.length; i++) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("TITLE", TITLE[i]);
    map.put("CONTENT", CONTENT[i]);
    map.put("IMG", IMG[i]);
    map.put("STATUS", LIST_NOT);
    list.add(map);}

将ListView与Adapter绑定:

adapter = new MyAdapter(this, list);
lv.setAdapter(adapter);

在onItemClick中处理选中事件:

for (int i = 0; i < TITLE.length; i++) {

    list.get(i).put("STATUS", LIST_NOT);
}
list.get(arg2).put("STATUS", LIST_SELECT);

adapter.getView(arg2, null, lv);
adapter.notifyDataSetChanged();
效果图如下(图片随便拉来的:-))

初始时:

选中“后来”,改变图标,改变字体颜色,改变文字阴影。
Android ListView之动态修改_www.fengfly.com

ok,这样就完成了。

言归正传。

单字段排序:

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字段为图片样式):
Android ListView之排序_www.fengfly.com Android ListView之排序_www.fengfly.com


如上图如果这样排你肯定不满意。因为文本没有排序。
多字段排序:

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;
        }
   });
}

前后效果图如下:
Android ListView之排序_www.fengfly.com Android ListView之排序_www.fengfly.com
值得一提的是右边图片的样式:

<!-- 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); 


相关文章
|
10月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
636 65
|
6月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
415 4
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
414 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1582 11
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
422 2
|
Android开发 开发者 UED
Android项目架构设计问题之加载数据到列表如何解决
Android项目架构设计问题之加载数据到列表如何解决
120 0
|
安全 Java API
Android获取Wi-Fi网络列表
【6月更文挑战第21天】
528 0
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
201 2
|
Android开发
Android自定义ListView和GridView解决滑动冲突和显示不全
Android自定义ListView和GridView解决滑动冲突和显示不全
276 0
|
Android开发
Android项目实战(十五):自定义不可滑动的ListView和GridView
原文:Android项目实战(十五):自定义不可滑动的ListView和GridView 不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView { public NoScrollLi...
1114 0