public class CommonNumberActivity extends Activity {
private ExpandableListView mElv;
private int mExpandPosition = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common_number);
initView();
initDada();
}
private void initView() {
mElv = (ExpandableListView) findViewById(R.id.elv_common_number);
mElv.setOnGroupClickListener(new OnGroupClickListener() {
// 返回值表示要不要自己处理组的点击事件
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition,
long id) {
// 如果当前点击的条目不是已经展开的条目, 应该让展开的条目关闭
if (mExpandPosition != groupPosition) {
mElv.collapseGroup(mExpandPosition);
}
if (mElv.isGroupExpanded(groupPosition)) {
// 关闭, 折叠
mElv.collapseGroup(groupPosition);
// 恢复记录的展开条目位置
mExpandPosition = -1;
} else {
// 展开
mElv.expandGroup(groupPosition);
// 记录展开的位置
mExpandPosition = groupPosition;
// 设置选中的组, 移动到第一个位置
mElv.setSelectedGroup(groupPosition);
}
return true;
}
});
mElv.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
String[] childName = CommonNumDao.queryChildName(getApplicationContext(),
groupPosition, childPosition);
String number = childName[1];
// 打电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
return true; // 表示自己处理点击事件
}
});
}
private void initDada() {
// 先获取所有的数据
// 再设置Adapter
mElv.setAdapter(new CommonNumberAdapter());
}
private class CommonNumberAdapter extends BaseExpandableListAdapter {
// 获取组的个数
@Override
public int getGroupCount() {
return CommonNumDao.queryGroupCount(getApplicationContext());
}
// 获取某个组的子条目的个数
@Override
public int getChildrenCount(int groupPosition) {
return CommonNumDao.queryChildrenCount(getApplicationContext(), groupPosition);
}
// 获取某个组对应的View
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
TextView tv = new TextView(getApplicationContext());
String name = CommonNumDao.queryGroupName(getApplicationContext(), groupPosition);
tv.setText(name);
tv.setTextSize(20); // 单位是sp
tv.setPadding(8, 8, 8, 8); // 单位是像素
tv.setTextColor(Color.BLACK);
tv.setBackgroundColor(Color.parseColor("#FF999999"));
return tv;
}
// 获取某个组里某个子条目对应的View
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TextView tv = new TextView(getApplicationContext());
String[] childName = CommonNumDao.queryChildName(getApplicationContext(),
groupPosition, childPosition);
tv.setText(childName[0] + "\n" + childName[1]);
tv.setTextColor(Color.BLACK);
tv.setTextSize(18); // 单位是sp
tv.setPadding(12, 8, 8, 8); // 单位是像素
tv.setBackgroundColor(Color.WHITE);
return tv;
}
// 子条目是否可点击
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true; // 表示子条目可点击
}
// 下面这些方法不用实现
// 某个组对应的对象
@Override
public Object getGroup(int groupPosition) {
return null;
}
// 某个组里的子条目对应的对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
// 某个组对应的id
@Override
public long getGroupId(int groupPosition) {
return 0;
}
// 某个组里的子条目对应的id
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
// 是否有稳定的id
@Override
public boolean hasStableIds() {
return false;
}
}
}
private ExpandableListView mElv;
private int mExpandPosition = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common_number);
initView();
initDada();
}
private void initView() {
mElv = (ExpandableListView) findViewById(R.id.elv_common_number);
mElv.setOnGroupClickListener(new OnGroupClickListener() {
// 返回值表示要不要自己处理组的点击事件
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition,
long id) {
// 如果当前点击的条目不是已经展开的条目, 应该让展开的条目关闭
if (mExpandPosition != groupPosition) {
mElv.collapseGroup(mExpandPosition);
}
if (mElv.isGroupExpanded(groupPosition)) {
// 关闭, 折叠
mElv.collapseGroup(groupPosition);
// 恢复记录的展开条目位置
mExpandPosition = -1;
} else {
// 展开
mElv.expandGroup(groupPosition);
// 记录展开的位置
mExpandPosition = groupPosition;
// 设置选中的组, 移动到第一个位置
mElv.setSelectedGroup(groupPosition);
}
return true;
}
});
mElv.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
String[] childName = CommonNumDao.queryChildName(getApplicationContext(),
groupPosition, childPosition);
String number = childName[1];
// 打电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
return true; // 表示自己处理点击事件
}
});
}
private void initDada() {
// 先获取所有的数据
// 再设置Adapter
mElv.setAdapter(new CommonNumberAdapter());
}
private class CommonNumberAdapter extends BaseExpandableListAdapter {
// 获取组的个数
@Override
public int getGroupCount() {
return CommonNumDao.queryGroupCount(getApplicationContext());
}
// 获取某个组的子条目的个数
@Override
public int getChildrenCount(int groupPosition) {
return CommonNumDao.queryChildrenCount(getApplicationContext(), groupPosition);
}
// 获取某个组对应的View
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
TextView tv = new TextView(getApplicationContext());
String name = CommonNumDao.queryGroupName(getApplicationContext(), groupPosition);
tv.setText(name);
tv.setTextSize(20); // 单位是sp
tv.setPadding(8, 8, 8, 8); // 单位是像素
tv.setTextColor(Color.BLACK);
tv.setBackgroundColor(Color.parseColor("#FF999999"));
return tv;
}
// 获取某个组里某个子条目对应的View
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TextView tv = new TextView(getApplicationContext());
String[] childName = CommonNumDao.queryChildName(getApplicationContext(),
groupPosition, childPosition);
tv.setText(childName[0] + "\n" + childName[1]);
tv.setTextColor(Color.BLACK);
tv.setTextSize(18); // 单位是sp
tv.setPadding(12, 8, 8, 8); // 单位是像素
tv.setBackgroundColor(Color.WHITE);
return tv;
}
// 子条目是否可点击
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true; // 表示子条目可点击
}
// 下面这些方法不用实现
// 某个组对应的对象
@Override
public Object getGroup(int groupPosition) {
return null;
}
// 某个组里的子条目对应的对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
// 某个组对应的id
@Override
public long getGroupId(int groupPosition) {
return 0;
}
// 某个组里的子条目对应的id
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
// 是否有稳定的id
@Override
public boolean hasStableIds() {
return false;
}
}
}