1 布局
<?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" >
<TextView
style="@style/TvTitleStyle"
android:text="常用号码" />
<ExpandableListView
android:id="@+id/el_common_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ExpandableListView>
</LinearLayout>
2 MainActivity
package org.heima.mobilesafe01;
import org.heima.mobilesafe01.db.CommonNumDao;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.TextView;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ContentView;
import com.lidroid.xutils.view.annotation.ViewInject;
/**
* @author U 常用号码
*/
@ContentView(R.layout.activity_common_num)
public class CommonNumActivity extends Activity {
@ViewInject(R.id.el_common_num)
ExpandableListView elCommonNum;
private int mCurrentPosition = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
initData();
initEvent();
}
private void initView() {
ViewUtils.inject(this);
elCommonNum.setAdapter(new CommonNumAdapter());
}
private void initEvent() {
elCommonNum.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// Toast.makeText(getApplicationContext(), "xx", 0).show();
String[] texts = CommonNumDao.getChildText(
getApplicationContext(), groupPosition, childPosition);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + texts[1]));
startActivity(intent);
return false;
}
});
elCommonNum.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
// 自己控制他们打开或者关闭
// elCommonNum.expandGroup(groupPos);// 打开
// elCommonNum.collapseGroup(groupPos)// 关闭
// elCommonNum.setSelectedGroup(groupPosition);
if (mCurrentPosition == -1) {// 一个没有打开
elCommonNum.expandGroup(groupPosition);
mCurrentPosition=groupPosition;
elCommonNum.setSelectedGroup(groupPosition);
} else {// 至少有一个打开
// 判断一下是否点击自己
if(mCurrentPosition==groupPosition){
elCommonNum.collapseGroup(mCurrentPosition);
mCurrentPosition=-1;
return true;
}
// 关闭上一个
elCommonNum.collapseGroup(mCurrentPosition);
elCommonNum.expandGroup(groupPosition);
elCommonNum.setSelectedGroup(groupPosition);
// 更新position
mCurrentPosition=groupPosition;
}
return true;
}
});
}
private void initData() {
}
class CommonNumAdapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return CommonNumDao.getGroupCount(getApplicationContext());
}
@Override
public int getChildrenCount(int groupPosition) {
return CommonNumDao.getChildrenCount(getApplicationContext(),
groupPosition);
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new TextView(getApplicationContext());
}
TextView tv = (TextView) convertView;
tv.setText(CommonNumDao.getGroupText(getApplicationContext(),
groupPosition));
tv.setTextSize(14);
tv.setTextColor(Color.parseColor("#FC6844"));// #ff0000
tv.setBackgroundColor(Color.parseColor("#94D36B"));
tv.setPadding(40, 10, 10, 10);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new TextView(getApplicationContext());
}
TextView tv = (TextView) convertView;
tv.setTextSize(17);
tv.setTextColor(Color.parseColor("#aa000000"));// #ff0000
tv.setBackgroundColor(Color.WHITE);
tv.setPadding(10, 10, 10, 10);
String[] texts = CommonNumDao.getChildText(getApplicationContext(),
groupPosition, childPosition);
tv.setText(texts[0] + "\n" + texts[1]);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
}
3 CommonNumDao
package org.heima.mobilesafe01.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
* @author U 常用号码的Dao
*/
public class CommonNumDao {
/**
* @param context
* @return 获取组的数量
*/
public static int getGroupCount(Context context) {
String path = context.getFilesDir().getAbsolutePath() + "/commonnum.db";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
Cursor cursor = database.rawQuery("select count(1) from classlist",
null);
if (cursor != null) {
if (cursor.moveToNext()) {
int groupCount = cursor.getInt(0);
cursor.close();
return groupCount;
}
}
database.close();
return 0;
}
/**
* @param context
* @param groupPosition
* @return 根据组的position获取相应孩子数量
*/
public static int getChildrenCount(Context context, int groupPosition) {
String path = context.getFilesDir().getAbsolutePath() + "/commonnum.db";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
Cursor cursor = database.rawQuery("select count(1) from table"
+ (groupPosition + 1), null);
if (cursor != null) {
if (cursor.moveToNext()) {
int childCount = cursor.getInt(0);
cursor.close();
return childCount;
}
}
database.close();
return 0;
}
/**
* @param context
* @param groupPostion
* @return 根据组的position获取相应文本
*/
public static String getGroupText(Context context, int groupPostion) {
// select name from classlist where idx=5
String path = context.getFilesDir().getAbsolutePath() + "/commonnum.db";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
Cursor cursor=database.rawQuery("select name from classlist where idx=?",
new String[] { String.valueOf((groupPostion + 1)) });
if (cursor != null) {
if (cursor.moveToNext()) {
String groupText = cursor.getString(0);
cursor.close();
return groupText;
}
}
database.close();
return null;
}
/**
* @param context
* @param groupPosition
* @param childPosition
* @return
* 根据组position和孩子position获取相应的文本
*/
public static String[] getChildText(Context context,int groupPosition,int childPosition){
String path = context.getFilesDir().getAbsolutePath() + "/commonnum.db";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
String sql="select name,number from table"+(groupPosition+1)+" where _id=?";
Cursor cursor=database.rawQuery(sql, new String[]{String.valueOf(childPosition+1)});
String[] childTexts=new String[2];
if (cursor != null) {
if (cursor.moveToNext()) {
childTexts[0] = cursor.getString(0);
childTexts[1] = cursor.getString(1);
cursor.close();
return childTexts;
}
}
database.close();
return null;
}
}