11.ExpandableListView


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

}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值