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

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


2013年8月9日Android记录

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

}


 


 

posted @ 2013-08-09 23:21  javawebsoa  Views(382)  Comments(0Edit  收藏  举报