2024年安卓最全Android记录3--ExpandableListView使用+获取SIM卡状态信息,android handler面试题

尾声

一转眼时间真的过的飞快。我们各奔东西,也各自踏上了自己的旅途,但是即使多年不见,也因为这份情谊我们依旧如从前那般“亲密”。不忘初心方得始终。加油吧,程序员们,在我看来35岁,40岁从来不是危机,只要永远不要忘记自己为何踏上征程!

为了让更多在学习中或者最近要准备面试的朋友们看到这篇文章,希望你们能多多评论,点赞+转发!

再次感谢所有给我提供过题目的朋友们,感谢一路有你!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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” />

子列表项

/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” />

自定义适配器(重要)

/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;

/**

  • 自定义列表监听器

最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

d复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)

[外链图片转存中…(img-8WP9yFrM-1715743802620)]

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
[外链图片转存中…(img-1aeEdCUX-1715743802621)]

这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值