通讯录代码讲解

在闲暇之余,自己整理一些代码,开发这个通讯录。

1.adapter中包含phone和user两个适配器,主要是接收数据给Listview去使用。

2.bean文件中定义phoneNumber和UserBean.这两个定义的目的是为了数据库中使用的表。从代码中能够看出tableName。

3.MyDilog是自定义对话框

4.sql文件夹下有phoneDao和UserDao,用于对两张表的数据操作。sqlhelper是orm数据库初始化使用。

5.util是工具类,一个是生成汉字,一个生成拼音的。

6.view中的CircleImageView是自定义头像view。

7.页面为两个activity。一个是MainActivity和DetailActivity。两个页面采用最新语言kotlin语言进行开发。

8.在MainActivity中onCreate为入口方法。

sqlHelper = SqlHelper.getInstance(this)
userDao = UserDao(this)
phoneDao = PhoneDao(this)
characterParser = CharacterParser() 初始化数据库
handler = object : Handler() {
    override fun handleMessage(msg: Message) {
        if (msg.what == 10010) {
            refreshUi()
        }
    }
}更新UI
editText = findViewById(R.id.editText)
imageView = findViewById(R.id.imageView)
listView = findViewById(R.id.list_view)
textView11 = findViewById(R.id.textView11)
textView12 = findViewById(R.id.textView12)
imageView5 = findViewById(R.id.imageView5)
linearLayout = findViewById(R.id.linearLayout2)
scrollView = findViewById(R.id.scrollView)
toolbar = findViewById(R.id.toolbar)
textView14 = findViewById(R.id.textView14)
toolbar!!.title = "通讯录"
toolbar!!.setTitleTextColor(resources.getColor(R.color.dimgrey))

初始化控件

listView!!.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
    //todo 跳转详情页
    val userAdpater2 = parent.adapter as UserAdpater
    val userBean = userAdpater2.getItem(position)
    val editor = sharedPreferences.edit()
    editor.putInt("userId", userBean.id)
            .apply()
    val intent = Intent(this@MainActivity, DetailsActivity::class.java)
    intent.putExtra("UserBean", userBean)
    startActivity(intent)
    finish()
}点击listview中的某一项进入详情页面
listView!!.onItemLongClickListener = AdapterView.OnItemLongClickListener { parent, view, position, id ->
    val popupMenu = PopupMenu(this@MainActivity, view)
    popupMenu.menuInflater.inflate(R.menu.popu_menu, popupMenu.menu)
    popupMenu.setOnMenuItemClickListener {
        //todo 删除操作
        val userAdpater1 = parent.adapter as UserAdpater
        val userBean = userAdpater1.getItem(position)
        userDao!!.delete(userBean)
        notification(userBean.name)
        refreshUi()
        false
    }

    popupMenu.show()
    true
}长按进行删除
override fun onMenuItemClick(menuItem: MenuItem): Boolean {
    when (menuItem.itemId) {
        R.id.menu_add -> {
            //todo 添加联系人
            val myDilog = MyDilog(this@MainActivity)
            myDilog.setDialogCallBack { userBean ->
                val i = userDao!!.insert(userBean)
                if (i != -1) {
                    //                            Toast.makeText(MainActivity.this, "插入成功" + i, Toast.LENGTH_SHORT).show();
                    runOnUiThread { refreshUi() }

                }
            }
            myDilog.show()
            val mWindow = myDilog.window
            mWindow!!.setGravity(Gravity.CENTER)
        }
        R.id.menu_about -> {
            //todo 关于
            val builder = AlertDialog.Builder(this)
            builder.setTitle("关于")
                    .setMessage("本次课程设计")
            builder.show()
        }
        R.id.mene_grop -> if (menuItem.title == "分组查看") {
            flag = true
            editText!!.hint = "输入查询分组名"
            menuItem.title = "取消分组查看"
            val beanList = userDao!!.qurreyAll()
            list2 = sort1(beanList)
            userAdpater2 = UserAdpater(this, list2, 1)
            listView!!.adapter = userAdpater2
        } else {
            flag = false
            menuItem.title = "分组查看"
            editText!!.hint = "请输入查询联系人的姓名"
            userAdpater!!.notifyDataSetChanged()
            listView!!.adapter = userAdpater

        }
        R.id.menu_addData -> {
            val myThread = MyThread()
            myThread.start()
        }
    }
    return false
}右上角菜单功能
internal fun notification(name: String) { 通知栏提示
    val name1 = "my_package_channel"//渠道名字
    val id = "my_package_channel_1" // 渠道ID
    val description = "my_package_first_channel" // 渠道解释说明
    val pendingIntent: PendingIntent//非紧急意图,可设置可不设置
    notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    //判断是否是8.0上设备
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val importance = NotificationManager.IMPORTANCE_LOW
        var mChannel: NotificationChannel? = null
        if (mChannel == null) {
            mChannel = NotificationChannel(id, name1, importance)
            mChannel.description = description
            mChannel.enableLights(true) //是否在桌面icon右上角展示小红点
            notificationManager!!.createNotificationChannel(mChannel)
        }
        notificationBuilder = Notification.Builder(this)

        val intent = Intent(this, MainActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
        pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

        notificationBuilder!!
                .setSmallIcon(R.drawable.small)
                .setContentTitle("通讯录提示")
                .setContentText("$name\t删除成功")
                .setContentIntent(pendingIntent)
                .setChannelId(id)
                .setAutoCancel(true)
    } else {
        notificationBuilder = Notification.Builder(this)
                .setSmallIcon(R.drawable.small)
                .setContentTitle("通讯录提示")
                .setContentText("$name\t删除成功")
                .setAutoCancel(true)

    }


    notificationManager!!.notify(0, notificationBuilder!!.build())

}删除成功后在通知栏显示

9.DetailsActivity 

private var name: EditText? = null
private var email: EditText? = null
private var school: EditText? = null
private var sex: Spinner? = null
private var group: Spinner? = null
private var listView: ListView? = null
private var toolbar: Toolbar? = null
private var list: MutableList<PhoneNumber>? = null
private val newList: List<PhoneNumber>? = null
private var userBean: UserBean? = null
private var userDao: UserDao? = null
private var phoneDao: PhoneDao? = null
private val phoneNumber: PhoneNumber? = null
private var phoneSpinner: Spinner? = null
private var phoneEd: EditText? = null
private var phoneImg: ImageView? = null
private var phoneAdapter: PhoneAdapter? = null
private val map1 = HashMap<Int, EditText>()
private val map2 = HashMap<Int, Spinner>()

声明变量

userDao = UserDao(this) 初始化user数据类型
phoneDao = PhoneDao(this) 初始化phone数据类型
name = findViewById(R.id.editText3)
email = findViewById(R.id.editText4)
school = findViewById(R.id.editText5)
sex = findViewById(R.id.spinner)
group = findViewById(R.id.spinner2)
listView = findViewById(R.id.details_listview)
phoneSpinner = findViewById(R.id.details_spinner)
phoneEd = findViewById(R.id.details_number)
phoneImg = findViewById(R.id.details_img)
toolbar = findViewById(R.id.toolbar2)

 

list = phoneDao.queryByUserId(userBean!!.id)
phoneAdapter = PhoneAdapter(this, list, map1, map2)
listView!!.adapter = phoneAdapter

得到list数据,然后赋值给adapter,将adapter赋值给listview。

 phoneEd!!.setOnLongClickListener {
            call(phoneEd!!.text.toString())
//            doSendSMSTo(phoneEd!!.text.toString())

        }

加入长按打电话功能,注释掉的是发送短信功能

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值