上一期我们讲到了长按菜单,但是还留了三个函数需要完善,那么这一期我们就来实现一下长按菜单下面的商品的删除、修改和查找,对了,毕竟不是基础学习了,这里的一些对话框啊,布局之类的我就不介绍了,想必大家一定都有了基础,这些东西不用说应该都能看明白:

1)、商品的删除

//2.3 菜单点击函数实现对应操作
fun accountdelete(account: Account) {
    //Toast.makeText(this,"亲,数据更新",Toast.LENGTH_LONG).show()
    //定义对话框确认是否删除
    var builder: AlertDialog.Builder = AlertDialog.Builder(this)
    builder.setTitle("警告")
    builder.setMessage("您真的要删除吗?")
    builder.setIcon(R.mipmap.alert)
    builder.setPositiveButton("确认") { dialogInterface, i ->
        var result: Int = dao.delete(account)
        accountlist = dao.getAllList()
        adapter.notifyDataSetChanged()
        if (result > 0) {
            Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show()
        }
    }
    builder.setNegativeButton("取消") { dialogInterface, i ->

    }
    builder.show()
}

删除还是比较好做的,毕竟之前也做过这个,而且没有布局,就是弹出一个对话框,然后两个选项按钮就可以了,没有啥可说的,就是我们都是根据的传过来的实体类account获取到对应的数据进行操作的;在kotlin中,创建一个对话框和java的思路是一样的,我们使用alertdialog.Builder来创建一个对话框,使用它下面的各种set方法来设置标题、显示信息、图标,还有经常用到的确认按钮和取消按钮,也是相同的名字,setPositiveButton,这里与java不同的就是我们不是使用匿名内部类来写这个处理逻辑了,而是直接在后面加一个大括号,里面使用箭头函数来写对应的逻辑代码;

2)、商品的替换

fun accountupdate(account: Account) {
    //Toast.makeText(this,"亲,功能还在开发",Toast.LENGTH_LONG).show()
    var builder: AlertDialog.Builder = AlertDialog.Builder(this)
    builder.setTitle("更新")
    var view: View = LayoutInflater.from(this).inflate(R.layout.update_menu_view, null)
    //将长按商品的数据显示到编辑框
    var menu_update_name: EditText = view.findViewById(R.id.menu_update_name)
    var menu_update_balance: EditText = view.findViewById(R.id.menu_update_balance)

    menu_update_balance.setText(account.balance.toString())
    menu_update_name.setText(account.name)
    builder.setView(view)
    builder.setIcon(R.mipmap.alert)
    builder.setPositiveButton("确认") { dialogInterface, i ->
        account.name = menu_update_name.text.toString()
        account.balance = menu_update_balance.text.toString().toInt()
        var result: Int = dao.update(account)

        adapter.notifyDataSetChanged()
        if (result > 0) {
            Toast.makeText(this, "已经修改", Toast.LENGTH_LONG).show()
        }
    }
    builder.setNegativeButton("取消") { dialogInterface, i ->

    }

    builder.show()
}

我们根据传过来的account数据就可以实现对数据的替换操作了,这个时候使用到了dao里面的update函数,然后将适配器刷新一下就可以了,这里我在多提醒一下,我们使用了布局文件,那么如何获取布局文件呢?

 LayoutInflater.from(this).inflate(R.layout.look_menu_view, null)

这个我们在java中也是使用过的,只不过那个时候我们没有加第二个参数null,这里需要加一下,然后就可以通过这个view对象获取到这个布局文件下面的组件对象了,我们对替换功能的要求是再点击替换按钮之后需要显示我们长按的那个商品的信息,也就是这里的参数account,直接setText不就可以了么?

当然我们替换数据的时候需要两个输入框:

android 商品描述 android 商品列表布局_java

而且在点击之后还要显示我们长按的那个商品的信息,再对其进行修改,这里我们就是用布局文件来做这个界面:

<?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:padding="20dp"
    android:gravity="center"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:id="@+id/menu_update_name"
        android:hint="请输入名称"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:id="@+id/menu_update_balance"
        android:hint="请输入价格"/>

</LinearLayout>

布局也简单,一个线性两个编辑框就搞定;

3、商品的查找

fun accountlook(account: Account) {
    //Toast.makeText(this,"亲,已显示全部信息",Toast.LENGTH_LONG).show()
    var builder: AlertDialog.Builder = AlertDialog.Builder(this)
    builder.setTitle("查找")

    var view: View = LayoutInflater.from(this).inflate(R.layout.look_menu_view, null)
    var menu_find_name: EditText = view.findViewById(R.id.menu_find_name)
    builder.setView(view)
    builder.setIcon(R.mipmap.alert)
    builder.setPositiveButton("确认") { dialogInterface, i ->
        accountlist = dao.findbyname(menu_find_name.text.toString())
        adapter.notifyDataSetChanged()
        if (accountlist != null) {
            Toast.makeText(this, "亲,已显示全部信息", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "没有找到相关信息", Toast.LENGTH_SHORT).show()
        }
    }
    builder.setNegativeButton("取消") { dialogInterface, i ->

    }

    builder.show()
}

当然了,查找也就是通过用户输入商品的名称然后调用dao层中的查找方法,将查到的数据化填写到accountlist列表中,刷新一下适配器显示一下就可以了;既然是要输入名称,那么也需要用布局来实现:

<?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:gravity="center"
    android:padding="20sp"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:id="@+id/menu_find_name"
        android:hint="请输入名称"/>

</LinearLayout>

这里大家可能会有点不懂,为什么查询到的数据要放到accountlist中去,然后让页面显示,因为啊,我们accountlist只是一个中间容器,适配器中的数据全部是来自于这个容器的,我们搜索数据放到这里面去当然是为了让用户看到啊,毕竟我们设置适配器的数据源就是accountlist,而且它仅仅是一个中间容器,我们数据库中的列表可没有被替换掉哦,我们数据库中的数据还在数据空中,如果想要显示直接调用dao层中的getAllList方法,刷新一下数据库就可以重新将数据显示到页面上了;

android 商品描述 android 商品列表布局_数据_02

 最后,说实话,不管学什么东西,基础非常重要,如果没有打好基础到后面只会越来越难,而有基础的同学学到后面的难点知识也会觉得融会贯通,不会觉得很难学,下次我们就要进入网络的学习了,没有打好基础的小伙伴可要讲以前的知识全部再学一遍才行,温故而知新,这不会需要很多时间的;