ExpandableListView的使用(操作已经存在的数据库)

首先看数据库效果图:(存在于assets中,与res同级)

这里写图片描述

1,读取存在于assets中的数据库

//专门用来复制数据库
    private void copyDB(final String name) {
       new Thread(){
           public void run(){
        String name = "commonnum.db";
               try {
                   // 第一步 在本机创建一个文件和文件保存的名称
                   mFile = new File(getFilesDir(), name);
                   if(mFile.exists()&&mFile.length()>0) {
                      runOnUiThread(new Runnable() {

                          @Override
                          public void run() {
                              Toast.makeText(SplashActivity.this, "数据库已近存在", Toast.LENGTH_SHORT).show();
                          }
                      });
                     return;
                   }

                   // 第二步 读取放置在assets中的数据,读取的是一个流
                   InputStream is = getAssets().open(name);
                   // 第三步需要文件写入流
                   FileOutputStream fos = new FileOutputStream(mFile);
                   int len=0;
                   byte[] buffer=new byte[1024];
                   while ((len=is.read(buffer))!=-1){
                       fos.write(buffer,0,len);
                   }
                   is.close();
                   fos.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
       }.start();

    }

2,实现其数据库Dao的查询功能

public class CommonDao {
     //得到最外层的个数
    public static  int getGroupCount(SQLiteDatabase db){
        int count=0;
        //先获得一个可读数据库db
        Cursor cursor = db.rawQuery("select count(*) from classlist", null);
        cursor.moveToNext();
        count= cursor.getInt(0);
        return count;
    }

    /**
     * 要得到每个最外层的item对应的子孩子的个数
     * @param groupPosition
     * @return
     */
    public static int getChildrenCount(int groupPosition,SQLiteDatabase db){
        int count=0;
       int newPosition=groupPosition+1;
        //先获得一个可读数据库db
        String tableName="table"+newPosition;
        Cursor cursor = db.rawQuery("select count(*) from " + tableName, null);
        cursor.moveToNext();
        count= cursor.getInt(0);
        return count;
    }

    /**
     * 查询最外层的item的内容,根据传递过来的最外层的位置
     * @param groupPosition
     * @return
     */
    public  static String getGroupView(int groupPosition,SQLiteDatabase db){
        String groupName=null;
        int idx=groupPosition+1;
        Cursor cursor = db.query("classlist", new String[]{"name"}, "idx=?", new String[]{String.valueOf(idx)}, null, null, null);
        while (cursor.moveToNext()){
            groupName = cursor.getString(0);
        }
        return groupName;
    }

    /**
     * 根据最外层的位置和内部的位置确定一个数据
     * @param groupPosition
     * @param childPosition
     * @return
     */
    public static String getChildView(int groupPosition, int childPosition,SQLiteDatabase db){
        String name=null;
        int newPosition=groupPosition+1;
        String tableName="table"+newPosition;
        int newChildPosition=childPosition+1;

        Cursor cursor = db.query(tableName, new String[]{"name", "number"}, "_id=?", new String[]{String.valueOf(newChildPosition)}, null, null, null);
        while (cursor.moveToNext()){
            name = cursor.getString(0)+"\n"+ cursor.getString(1);
        }

        return name;
    }

}

3,实现其具体的功能

public class CommonActivity extends Activity {
    private ExpandableListView elv_common;

    private SQLiteDatabase mDb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //已经存在的数据库可读操作
        mDb = SQLiteDatabase.openDatabase("/data/data/com.m520it.mobilsafe/files/commonnum.db", null, SQLiteDatabase.OPEN_READONLY);

        initView();
        initData();
        initEvent();
    }

    private void initEvent() {

        elv_common.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {
                   Toast.makeText(CommonActivity.this, CommonDao.getChildView(groupPosition,childPosition,mDb), Toast.LENGTH_SHORT).show();
                return false;
            }
        });

    }

    private void initData() {
        elv_common.setAdapter(new CommonAdapter());

    }

    private void initView() {
        setContentView(R.layout.activity_common);
        elv_common = (ExpandableListView)findViewById(R.id.elv_common);

    }
    class  CommonAdapter extends BaseExpandableListAdapter{

        /**
         * 获得最外层listView的个数
         * @return
         */
        @Override
        public int getGroupCount() {

            return CommonDao.getGroupCount(mDb);
        }

        /**
         *
         * @param groupPosition 代表第几个最外层的item
         * @return 当前对应最外层item的位置的子孩子个数
         */
        @Override
        public int getChildrenCount(int groupPosition) {

            return CommonDao.getChildrenCount(groupPosition,mDb);
        }

        /**
         * 最外层的item的视图
         * @param groupPosition
         * @param b
         * @param view
         * @param viewGroup
         * @return
         */
        @Override
        public View getGroupView(int groupPosition, boolean b, View view, ViewGroup viewGroup) {

            TextView tv=new TextView(getApplicationContext());
            tv.setTextSize(18);
            tv.setTextColor(Color.BLACK);
            tv.setText("      "+CommonDao.getGroupView(groupPosition,mDb));
            return tv;
        }

        /**
         * 每一个孩子的视图
         * @param groupPosition
         * @param childPosition
         * @param b
         * @param view
         * @param viewGroup
         * @return
         */
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
            TextView tv=new TextView(getApplicationContext());
            tv.setTextSize(18);
            tv.setTextColor(Color.BLACK);
            tv.setText(CommonDao.getChildView(groupPosition,childPosition,mDb));
            return tv;
        }

        @Override
        public Object getGroup(int i) {

            return null;
        }

        @Override
        public Object getChild(int i, int i1) {

            return null;
        }

        @Override
        public long getGroupId(int i) {

            return 0;
        }

        @Override
        public long getChildId(int i, int i1) {

            return 0;
        }

        @Override
        public boolean hasStableIds() {

            return false;
        }

       //控制子孩子能否被选中

        @Override
        public boolean isChildSelectable(int i, int i1) {

            return true;
        }
    }

    @Override
    protected void onPause() {
        mDb.close();
        super.onPause();
    }
}

备注:布局文件就省略了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值