zoukankan      html  css  js  c++  java
  • 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);
    			}
    		}
    	}
    
    }
    



  • 相关阅读:
    前后端分离后的前端时代
    解决input[type=file]打开时慢、卡顿问题
    es6快速入门
    jsonp的原理和实现
    减少前端代码耦合
    【css技能提升】css高级技巧
    vetur插件提示 'v-for' directives require 'v-bind:key' directives.错误的解决办法
    ES6的开发环境搭建
    netCore webapi Uow实现方式
    netcore webapi统一配置跨域问题
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3249254.html
Copyright © 2011-2022 走看看