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", "");
groupMap.put("detail", "4秒 2013-08-06 13:08");
groupList.add(groupMap); groupMap = new HashMap<String, Object>();
groupMap.put("username", "李四");
groupMap.put("number", "");
groupMap.put("detail", "6秒 2013-08-06 13:09");
groupList.add(groupMap); groupMap = new HashMap<String, Object>();
groupMap.put("username", "王五");
groupMap.put("number", "");
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() == ) {
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 = , 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);
}
}
} }

Android ExpandableListView使用+获取SIM卡状态信息的更多相关文章

  1. Android记录3--ExpandableListView使用+获取SIM卡状态信息

    Android记录3--ExpandableListView使用+获取SIM卡状态信息 2013年8月9日Android记录 ExpandableListView是一个可以实现下拉列表的控件,大家可能 ...

  2. Android获取SIM卡信息--TelephonyManager

    1>获得TelephonyManager  TelephonyManager telMgr = (TelephonyManager) getSystemService(TELEPHONY_SER ...

  3. Android本机号码及Sim卡状态的获取

    SIM卡存储的数据可分为四类:第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等.第二类是暂时存放的有关 ...

  4. TelephonyManager类:Android手机及Sim卡状态的获取

    TelephonyManager这个类很有用,可以得到很多关于手机和Sim卡的信息. 直接上注释后的代码,请享用 package net.sunniwell.app;import android.ap ...

  5. MTK Android 读取SIM卡参数,获取sim卡运营商信息

    android 获取sim卡运营商信息(转)   TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TE ...

  6. android中判断sim卡状态和读取联系人资料的方法

    在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...

  7. 十九、android中判断sim卡状态和读取联系人资料的方法

    在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...

  8. iphone获取sim卡信息

    /* iphone获取sim卡信息 1.加入一个Framework(CoreTelephony.framework). 2.引入头文件 #import <CoreTelephony/CTTele ...

  9. ios开发获取SIM卡信息

    .加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...

随机推荐

  1. Python的对象操作(一)

    python支持对象和函数   1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模 ...

  2. redis 实践—— sorted set, hash set

    在这里就不谈redis的安装与启动啦,网上太多人写这个了. 从最近的一个项目[钻石夺宝]说起,如果大家有玩过一元夺宝或者全名夺宝的话,大概会知道如果参与人数多的话,每隔几秒.快的话每隔一秒都会新生成一 ...

  3. [译]当你在浏览器输入url后发生了什么

    面试题会经常问这个,之前也被问过,回答的不是很好,后来看到百度前端的一篇博客,啰嗦了好多,很么触摸屏都上了..后来看到stackoverflow上的一个回答,比较短. 原文地址:http://stac ...

  4. mysql innodb 数据打捞(三)innodb 簇不连接页的扫描提取(计划)

    操作系统簇大小一般是4K,而innoDB的页大小一般是16K,那么就有可能16K的页没有存储在连续的簇中,这样扫描软件就不会扫描出来这样的页面.为了解决这个问题,决定给软件增加半页扫描功能. 在第一次 ...

  5. 九度OJ 1547 出入栈 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1547 题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈. 要求在操作序列的 ...

  6. Apache(二)

    Apache的基本配置 1.监听套接字[ip : port] 2.实现持久连接(keep alive) 3.MPM模块 命令行中执行 core.c        :  核心模块 prefork.c   ...

  7. Nwjs从入门到精通 菜鸟实践笔记【1】

    最近公司有想使用Nw来开发浏览器的想法,自己一直学的PHP,在网上并没有找到太多的相关资料,所以,就自己摸索着撸一条自学笔记: 当然呢,这里记录的都是我自己学习中遇到的问题,以及收获,希望通过自己的分 ...

  8. c语言知识(找出大于2门成绩不及格的学生)

    1.首先定义一个学生结构体(结构体中包含一个Score结构体): typedef struct score{ float chinese;//语文成绩 float english;//英语成绩 flo ...

  9. android适应屏幕

    生产android手机的厂商多不胜数,造就了android手机的屏幕尺寸也是不计其数.开发者为了使应用在各个品牌,各个型号的手机屏幕上保持一致的用户体验,就需要运用多种使应用的UI能适应不同屏幕尺寸的 ...

  10. Socket和SignalR

    写到一半停电了,这心情真是哔了狗了,草稿箱竟然也没有!!! 好吧,这篇文档是之前写的记录,现在来完善(还是要完善的). 导读: 附件代码实现: Socket: 定义,同步实现,异步实现,还包括了TCP ...