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

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。