zoukankan      html  css  js  c++  java
  • Android ExpandableListView使用+获取SIM卡状态信息

    ExpandableListView 是一个可以实现下拉列表的控件,大家可能都用过QQ,QQ中的好友列表就是用ExpandableListView实现的,不过它是自定义的适配器。本篇 博客除了要介绍ExpandableListView的使用,还整合了获取SIM的状态,这个很简单也就是获取系统服务,再调用相应的方法就可以实现,在 这里只是记录一下。

    本篇博客要实现效果图如下:

    除了子列表不怎么好看之外,组列表还是蛮好看的,这里只是为了演示,子列表就没做特别的处理。

     

    布局文件:

    /SIM_Card_Demo/res/layout/inbox.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:orientation="vertical" >
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/banner_bg" >
    
            <ImageButton
                android:id="@+id/imgBtn_Sort"
                android:layout_width="@dimen/banner_btn_width"
                android:layout_height="wrap_content"
                android:background="@drawable/banner_btn_bg_selector"
                android:src="@drawable/sort" />
    
            <ImageView
                android:id="@+id/img_DividerSort"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_toRightOf="@+id/imgBtn_Sort"
                android:src="@drawable/banner_divider" />
    
            <ImageView
                android:id="@+id/img_DividerSearch"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_toLeftOf="@+id/imgBtn_Search"
                android:src="@drawable/banner_divider" />
    
            <LinearLayout
                android:id="@+id/linear_Title"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_centerHorizontal="true"
                android:gravity="center_vertical" >
    
                <TextView
                    android:id="@+id/text_Title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/inbox"
                    android:textColor="@color/white"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:id="@+id/text_MailCount"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="(0/0)"
                    android:textColor="@color/white"
                    android:textSize="14sp"
                    android:textStyle="bold" />
            </LinearLayout>
    
            <RelativeLayout
                android:layout_width="40dp"
                android:layout_height="42dp"
                android:layout_alignParentRight="true"
                android:layout_marginRight="54dp" >
    
                <ImageView
                    android:id="@+id/img_Synchronizing"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_centerInParent="true"
                    android:contentDescription="@string/empty"
                    android:scaleType="fitXY"
                    android:src="@drawable/synchronizing" />
            </RelativeLayout>
    
            <ImageButton
                android:id="@+id/imgBtn_Search"
                android:layout_width="@dimen/banner_btn_width"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:background="@drawable/banner_btn_bg_selector"
                android:contentDescription="@string/search"
                android:src="@drawable/search" />
        </RelativeLayout>
     <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <ExpandableListView
                android:id="@+id/list_Inbox"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:cacheColorHint="@color/transparent"
                android:childDivider="@color/transparent"
                android:divider="@drawable/list_divider"
                android:fastScrollEnabled="true"
                android:groupIndicator="@color/transparent"
                android:listSelector="@color/transparent"
                android:scrollbars="none" />
    
        </RelativeLayout>
    
    </LinearLayout>

    组列表项

    /SIM_Card_Demo/res/layout/group_item.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:orientation="vertical" >
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/banner_bg" >
    
            <ImageButton
                android:id="@+id/imgBtn_Sort"
                android:layout_width="@dimen/banner_btn_width"
                android:layout_height="wrap_content"
                android:background="@drawable/banner_btn_bg_selector"
                android:src="@drawable/sort" />
    
            <ImageView
                android:id="@+id/img_DividerSort"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_toRightOf="@+id/imgBtn_Sort"
                android:src="@drawable/banner_divider" />
    
            <ImageView
                android:id="@+id/img_DividerSearch"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_toLeftOf="@+id/imgBtn_Search"
                android:src="@drawable/banner_divider" />
    
            <LinearLayout
                android:id="@+id/linear_Title"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_centerHorizontal="true"
                android:gravity="center_vertical" >
    
                <TextView
                    android:id="@+id/text_Title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/inbox"
                    android:textColor="@color/white"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:id="@+id/text_MailCount"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="(0/0)"
                    android:textColor="@color/white"
                    android:textSize="14sp"
                    android:textStyle="bold" />
            </LinearLayout>
    
            <RelativeLayout
                android:layout_width="40dp"
                android:layout_height="42dp"
                android:layout_alignParentRight="true"
                android:layout_marginRight="54dp" >
    
                <ImageView
                    android:id="@+id/img_Synchronizing"
                    android:layout_width="18dp"
                    android:layout_height="18dp"
                    android:layout_centerInParent="true"
                    android:contentDescription="@string/empty"
                    android:scaleType="fitXY"
                    android:src="@drawable/synchronizing" />
            </RelativeLayout>
    
            <ImageButton
                android:id="@+id/imgBtn_Search"
                android:layout_width="@dimen/banner_btn_width"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:background="@drawable/banner_btn_bg_selector"
                android:contentDescription="@string/search"
                android:src="@drawable/search" />
        </RelativeLayout>
     <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <ExpandableListView
                android:id="@+id/list_Inbox"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:cacheColorHint="@color/transparent"
                android:childDivider="@color/transparent"
                android:divider="@drawable/list_divider"
                android:fastScrollEnabled="true"
                android:groupIndicator="@color/transparent"
                android:listSelector="@color/transparent"
                android:scrollbars="none" />
    
        </RelativeLayout>
    
    </LinearLayout>

    子列表项
    /SIM_Card_Demo/res/layout/child_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/item_bg"
        >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffff0000"
                android:text="SIM卡状态:" />
    
            <TextView
                android:id="@+id/tv_sim_status"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ff00ff00"
                android:text="@string/app_name" />
    
    </LinearLayout>

    自定义适配器(重要)

    /SIM_Card_Demo/src/com/wwj/sim/demo/InboxListAdapter.java

    package com.wwj.sim.demo;
    
    import java.util.List;
    import java.util.Map;
    
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    /**
     * 自定义下列列表适配器
     * @author wwj
     * 注:要继承BaseExpandableListAdpater
     * 
     */
    public class InboxListAdapter extends BaseExpandableListAdapter {
        private Inbox inbox;
        private ExpandableListView list_Inbox;
        private List<Map<String, Object>> groupList;
        private List<Map<String, String>> childList;
    
        private LayoutInflater inflater;
    
        /**
         * 构造函数
         * 
         * @param inbox
         *            Activity对象引用
         * @param list_Inbox
         *            下拉列表对象引用
         * @param data
         *            数据
         */
        public InboxListAdapter(Inbox inbox, ExpandableListView list_Inbox,
                List<Map<String, Object>> groupList,
                List<Map<String, String>> childList) {
            super();
            this.inbox = inbox;
            this.list_Inbox = list_Inbox;
            this.groupList = groupList;
            this.childList = childList;
    
            inflater = LayoutInflater.from(inbox);
        }
    
        /**
         * 
         * @author wwj
         * 
         */
        private class GroupViewHolder {
            ImageButton imgBtn_Photo;
            TextView tv_name;
            TextView tv_number;
            TextView tv_details;
            ImageView img_status;
    
            public GroupViewHolder(View convertView) {
                imgBtn_Photo = (ImageButton) convertView
                        .findViewById(R.id.imgBtn_Photo);
                img_status = (ImageView) convertView.findViewById(R.id.img_Status);
                tv_details = (TextView) convertView.findViewById(R.id.text_Details);
                tv_name = (TextView) convertView.findViewById(R.id.text_Name);
                tv_number = (TextView) convertView.findViewById(R.id.text_Number);
    
                // 这个是防止图片聚焦,造成列表不能点击
                imgBtn_Photo.setFocusable(false);
    
            }
    
        }
    
        private class ChildViewHolder {
            TextView tv_sim_status;
    
            public ChildViewHolder(View converView) {
                tv_sim_status = (TextView) converView
                        .findViewById(R.id.tv_sim_status);
            }
        }
    
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return childPosition;
        }
    
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
    
        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View converView, ViewGroup parent) {
            final ChildViewHolder childViewHolder;
            if (converView == null) {
                converView = inflater.inflate(R.layout.child_item, null);
                childViewHolder = new ChildViewHolder(converView);
                converView.setTag(childViewHolder);
            } else {
                childViewHolder = (ChildViewHolder) converView.getTag();
            }
    
            childViewHolder.tv_sim_status.setText(childList.get(childPosition)
                    .get("tv_sim_status"));
            return converView;
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
            return childList.size();
        }
    
        @Override
        public Object getGroup(int groupPosition) {
            return groupList.get(groupPosition);
        }
    
        @Override
        public int getGroupCount() {
            return groupList.size();
        }
    
        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
    
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            final GroupViewHolder groupViewHolder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.group_item, null);
                groupViewHolder = new GroupViewHolder(convertView);
                convertView.setTag(groupViewHolder);
            } else {
                groupViewHolder = (GroupViewHolder) convertView.getTag();
            }
    
            groupViewHolder.img_status.setImageResource(R.drawable.mail_status_new);
            groupViewHolder.tv_name.setText(groupList.get(groupPosition)
                    .get("username").toString());
            groupViewHolder.tv_number.setText(groupList.get(groupPosition)
                    .get("number").toString());
            groupViewHolder.tv_details.setText(groupList.get(groupPosition)
                    .get("detail").toString());
            groupViewHolder.imgBtn_Photo
                    .setImageResource(R.drawable.contact_photo_default);
            return convertView;
        }
    
        @Override
        public boolean hasStableIds() {
            return false;
        }
    
        @Override
        public boolean isChildSelectable(int arg0, int arg1) {
            return false;
        }
    
    }

    /SIM_Card_Demo/src/com/wwj/sim/demo/Inbox.java

    package com.wwj.sim.demo;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.telephony.TelephonyManager;
    import android.widget.ExpandableListView;
    
    public class Inbox extends Activity {
        public ExpandableListView list_Inbox;    //下拉List控件
        public InboxListAdapter adapter;
        private TelephonyManager telephonyManager;    //用来获取电话的一些信息
        List<Map<String, Object>> groupList;
        List<Map<String, String>> childList;
        String sim_status;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.inbox);
            
            sim_status = readSIMCard();
            getData();
            
            //找到这个控件
            list_Inbox = (ExpandableListView) findViewById(R.id.list_Inbox);
            
            list_Inbox.setAdapter(new InboxListAdapter(Inbox.this, list_Inbox, groupList, childList));
            
            list_Inbox.setOnGroupExpandListener(new OneListItemExpandListener(list_Inbox));
            
        }
        
        
        
        void getData() {
            groupList = new ArrayList<Map<String,Object>>();
            Map<String, Object> groupMap = new HashMap<String, Object>();
            groupMap.put("username", "张三");
            groupMap.put("number", "44440011");
            groupMap.put("detail", "4秒 2013-08-06 13:08");
            groupList.add(groupMap);
            
            groupMap = new HashMap<String, Object>();
            groupMap.put("username", "李四");
            groupMap.put("number", "44440012");
            groupMap.put("detail", "6秒 2013-08-06 13:09");
            groupList.add(groupMap);
            
            groupMap = new HashMap<String, Object>();
            groupMap.put("username", "王五");
            groupMap.put("number", "44440013");
            groupMap.put("detail", "5秒 2013-08-06 13:10");
            groupList.add(groupMap);
            
            
            childList = new ArrayList<Map<String,String>>();
            Map<String, String> childMap1 = new HashMap<String, String>();
            childMap1.put("tv_sim_status", sim_status);
            childList.add(childMap1);
        }
    
        public String readSIMCard() {
            TelephonyManager tm = (TelephonyManager) this
                    .getSystemService(TELEPHONY_SERVICE);// 取得相关系统服务
            StringBuffer sb = new StringBuffer();
            switch (tm.getSimState()) { // getSimState()取得sim的状态 有下面6中状态
            case TelephonyManager.SIM_STATE_ABSENT:
                sb.append("无卡");
                break;
            case TelephonyManager.SIM_STATE_UNKNOWN:
                sb.append("未知状态");
                break;
            case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
                sb.append("需要NetworkPIN解锁");
                break;
            case TelephonyManager.SIM_STATE_PIN_REQUIRED:
                sb.append("需要PIN解锁");
                break;
            case TelephonyManager.SIM_STATE_PUK_REQUIRED:
                sb.append("需要PUK解锁");
                break;
            case TelephonyManager.SIM_STATE_READY:
                sb.append("良好");
                break;
            }
    
            if (tm.getSimSerialNumber() != null) {
                sb.append("@" + tm.getSimSerialNumber().toString());
            } else {
                sb.append("@无法取得SIM卡号");
            }
    
            if (tm.getSimOperator().equals("")) {
                sb.append("@无法取得供货商代码");
            } else {
                sb.append("@" + tm.getSimOperator().toString());
            }
    
            if (tm.getSimOperatorName().equals("")) {
                sb.append("@无法取得供货商");
            } else {
                sb.append("@" + tm.getSimOperatorName().toString());
            }
    
            if (tm.getSimCountryIso().equals("")) {
                sb.append("@无法取得国籍");
            } else {
                sb.append("@" + tm.getSimCountryIso().toString());
            }
    
            if (tm.getNetworkOperator().equals("")) {
                sb.append("@无法取得网络运营商");
            } else {
                sb.append("@" + tm.getNetworkOperator());
            }
            if (tm.getNetworkOperatorName().equals("")) {
                sb.append("@无法取得网络运营商名称");
            } else {
                sb.append("@" + tm.getNetworkOperatorName());
            }
            if (tm.getNetworkType() == 0) {
                sb.append("@无法取得网络类型");
            } else {
                sb.append("@" + tm.getNetworkType());
            }
            return sb.toString();
        }
    
    }

    点击列表展开的监听器 /SIM_Card_Demo/src/com/wwj/sim/demo/OneListItemExpandListener.java

    package com.wwj.sim.demo;
    
    import android.widget.ExpandableListView;
    import android.widget.ExpandableListView.OnGroupExpandListener;
    
    /**
     * 自定义列表监听器
     * @author wwj
     * 实现OnGroupExpandListener接口
     */
    public class OneListItemExpandListener implements OnGroupExpandListener {
        protected ExpandableListView listView;
        
        public OneListItemExpandListener(ExpandableListView listView) {
            this.listView = listView;
        }
    
    
    
        @Override
        public void onGroupExpand(int groupPosition) {
            for(int i = 0, count = listView.getExpandableListAdapter().getGroupCount(); i < count; i++) {
                if(groupPosition != i) { //关闭其他
                    if(listView.isGroupExpanded(groupPosition)) {
                        listView.collapseGroup(i);
                    }
                } else if(groupPosition == listView.getFirstVisiblePosition()){ // 让第一条可见
                    // android1.6不支持以下方法
                    listView.smoothScrollToPosition(groupPosition);
                }
            }
        }
    
    }
  • 相关阅读:
    王健林:在中国远离政府太假了 期望王思聪稳重
    科目二很难考吗?经验全在这里!
    HTTP 的长连接和短连接
    JS中实现字符串和数组的相互转化
    Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
    kafka数据可靠性深度解读
    深入浅出JMS(二)--ActiveMQ简单介绍以及安装
    ActiveMQ入门实例
    activemq的几种基本通信方式总结
    mysql按年度、季度、月度、周、日SQL统计查询
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4283544.html
Copyright © 2011-2022 走看看