利用ExpandableListView实现常用号码查询功能的实现

package com.loaderman.expandablelistviewdemo;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;

/**
 * <p>
 * 常用号码数据库查询
 */

public class CommonNumberDao {

    //获取所有常用号码
    public static ArrayList<GroupInfo> getCommonNumbers(Context ctx) {

        SQLiteDatabase database = SQLiteDatabase.openDatabase(ctx.getFilesDir()
                        .getAbsolutePath() + "/commonnum.db", null,
                SQLiteDatabase.OPEN_READONLY);

        Cursor cursor = database.query("classlist", new String[]{"name", "idx"}, null, null,
                null, null, null);

        ArrayList<GroupInfo> list = new ArrayList<>();
        if (cursor != null) {

            while (cursor.moveToNext()) {
                GroupInfo info = new GroupInfo();

                info.name = cursor.getString(0);
                info.idx = cursor.getString(1);
                info.children = getChildrenList(info.idx, database);//获取当前组的孩子信息

                list.add(info);
            }

            cursor.close();
        }

        database.close();

        return list;
    }

    //获取某组所有电话号码
    private static ArrayList<ChildInfo> getChildrenList(String idx, SQLiteDatabase database) {
        Cursor cursor = database.query("table" + idx, new String[]{"number", "name"}, null, null,
                null, null, null);

        ArrayList<ChildInfo> list = new ArrayList<>();
        if (cursor != null) {

            while (cursor.moveToNext()) {
                ChildInfo info = new ChildInfo();
                info.number = cursor.getString(0);
                info.name = cursor.getString(1);
                list.add(info);
            }

            cursor.close();
        }

        //database.ose();不能关闭数据库, 在getCommonNumbers中统一关闭数据库

        return list;
    }

    public static class GroupInfo {
        public String name;
        public String idx;
        public ArrayList<ChildInfo> children;//当前组的所有电话号码
    }

    public static class ChildInfo {
        public String name;
        public String number;
    }

}
package com.loaderman.expandablelistviewdemo;

import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ArrayList<CommonNumberDao.GroupInfo> mList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        copyDb("commonnum.db");//拷贝常用号码数据库
        ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv_list);
        //获取所有常用号码
        mList = CommonNumberDao.getCommonNumbers(this);
        elv.setAdapter(new MyAdapter());
        elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                Intent intent = new Intent(Intent.ACTION_DIAL);//进入拨号页面
                intent.setData(Uri.parse("tel:" + mList.get(groupPosition).children.get
                        (childPosition).number));
                startActivity(intent);
                return false;
            }
        });
    }

    private class MyAdapter extends BaseExpandableListAdapter {
        //返回组的个数
        @Override
        public int getGroupCount() {
            return mList.size();
        }
        //返回某组孩子个数
        @Override
        public int getChildrenCount(int groupPosition) {
            return mList.get(groupPosition).children.size();
        }
        //getItem:返回组对象
        @Override
        public CommonNumberDao.GroupInfo getGroup(int groupPosition) {
            return mList.get(groupPosition);
        }
        //返回孩子对象
        @Override
        public CommonNumberDao.ChildInfo getChild(int groupPosition, int childPosition) {
            return mList.get(groupPosition).children.get(childPosition);
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return groupPosition;

        }
        //是否有固定id, 默认就可以,不需要改动
        @Override
        public boolean hasStableIds() {
            return false;
        }
        //getView:返回组的布局对象
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            TextView view = new TextView(MainActivity.this);
            //view.setText("第" + groupPosition + "组");
            CommonNumberDao.GroupInfo info = getGroup(groupPosition);
            view.setText(info.name);
            view.setBackgroundColor(Color.GRAY);
            view.setPadding(50, 10, 10, 10);
            view.setTextSize(18);
            return view;
        }
        //返回子布局对象
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            TextView view = new TextView(MainActivity.this);
            //view.setText("第" + groupPosition + "组" + "-第" + childPosition + "项");
            CommonNumberDao.ChildInfo info = getChild(groupPosition, childPosition);
            view.setText(info.name + "\n" + info.number);
            view.setPadding(10, 10, 10, 10);
            view.setTextSize(16);
            return view;
        }
        //孩子是否可以点击
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    }
    private void copyDb(String dbName) {
        //拷贝文件, 输入流-->输出流
        //输出流
        //data/data/包名/files
        File filesDir = getFilesDir();
        File desFile = new File(filesDir, dbName);//目标文件

        //数据库只需要拷贝一次
        if (desFile.exists()) {
            System.out.println("数据库" + dbName + "已经存在,无需拷贝!");
            return;
        }

        AssetManager assets = getAssets();//资产目录管理器

        InputStream in = null;
        FileOutputStream out = null;
        try {
            in = assets.open(dbName);//获取资产目录文件的输入流
            out = new FileOutputStream(desFile);//输出流

            int len = 0;
            byte[] buffer = new byte[1024 * 8];
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }

            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        System.out.println("拷贝数据库" + dbName + "完成!!!");
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.loaderman.expandablelistviewdemo.MainActivity">
    <!--android:groupIndicator="@null" 可以去掉那个指示箭头-->
    <ExpandableListView
        android:id="@+id/elv_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ExpandableListView>
</LinearLayout>

效果:

时间: 2024-10-12 09:02:26

利用ExpandableListView实现常用号码查询功能的实现的相关文章

Python与数据库[2] -&gt; 关系对象映射/ORM -&gt; 利用 sqlalchemy 实现关系表查询功能

利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例中用到的表主要有3张,一张personInfo个人信息表,一张account_store账号信息表,以及一张person_account_rel的个人信息与账号关系表. 示例中将会通过已知的人物年龄和id通过个人信息表查出个人姓名(仅为参考示例,请忽略怪异的查找逻辑 :) ),随后根据关系表得到的人

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

利用PHP访问数据库——实现分页功能与多条件查询功能

1.实现分页功能 <body><table width="100%" border="1">  <thead>    <tr>      <th>代号</th>      <th>名称</th>      <th>价格</th>    </tr>  </thead>  <tbody>      <?php 

常用功能-查询功能测试点

测试方法 若查询条件为输入框,则参考输入框对应类型的测试方法 1.功能实现: (1)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到 (2)比较长的名称是否能查到 (3)输入系统中不存在的与之匹配的条件 (4)用户进行查询操作时,一般情况是不进行查询条件的清空,除非需求特殊说明. 2.组合测试: (1)不同查询条件之间来回选择,是否出现页面错误(单选框和多选框最容易出错) (2)测试多个查询条件时,要注意查询条件的组合测试,可能不同组合的测试会报错. 测试点 默认条件查询 按各查询条件是否都

利用solr实现商品的搜索功能

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引.搜索性能进行了优化. Solr是一个全文检索服务器,只需要进行配置就可以实现全文检索服务.有效降低频繁访问数据库对数据库造成的压力. 第一步:将solr部署在linux系统下. 第二步:solrJ是solr的客户端,使用它需要依赖solrJ的jar包. 第三步:将数据库的内容添加到solr的索引库,这样查询就在索

Elasticsearch5.0 Java Api(八) -- 常用DSL查询

测试常用的DSL组合查询功能 1 package com.juyun.test; 2 3 import java.net.InetAddress; 4 5 import org.elasticsearch.action.search.SearchResponse; 6 import org.elasticsearch.client.Client; 7 import org.elasticsearch.common.settings.Settings; 8 import org.elasticse

RPM软件包管理的查询功能 转

RPM软件包管理的查询功能: 命令格式 rpm {-q|--query} [select-options] [query-options] RPM的查询功能是极为强大,是极为重要的功能之一:举几个常用的例子,更为详细的具体的,请参考#man rpm 1.对系统中已安装软件的查询: 1)查询系统已安装的软件: 语法:rpm -q 软件名 举例: [[email protected] beinan]# rpm -q gaim gaim-1.3.0-1.fc4 -q就是 --query ,中文意思是“

RPM软件包管理的查询功能

以后大家升级rpm包的时候,不要用Uvh了! 我推荐用Fvh 前者会把没有安装过得包也给装上,后者只会更新已经安装的包 总结:未安装的加上小写p,已安装的不需要加p   查询q rpm {-q|--query} [select-options] [query-options] RPM的查询功能是极为强大,是极为重要的功能之一:举几个常用的例子,更为详细的具体的,请参考#man rpm 1.对系统中已安装软件的查询: 1)查询系统已安装的软件: 语法:rpm -q 软件名 举例: [[email 

【Mysql】利用内连接与嵌套查询实现多表查询,主键、外键的基本概念

虽然多表查询,在计算机的必须课,数据库,里面已经大讲特讲,但是这个难点很多老师都没有讲深讲透.跟你净扯一大堆,左连接右连接的东西,让人一头雾水.老师把所有多表查询的方法告诉你,但是到头来一种方法都没有掌握.其实只要记住一种就够了,学会多表查询,除了在你考数据库能够拿到很高分之外,到了实际应用,很多地方都用到多表查询.比如论坛工程中分析回帖发帖的关系,提供该用户发了什么帖子的功能.比如信息管理系统中,分析班级与学生.老师之间的关系,提供该班级中存在多少学生的查询功能.就需要用到多表查询,你总不能把