kotlin<文件中的方法>和<类中的方法>的使用区别

 MyUtils.kt 文件中直接有方法,文件中还有类,类中也有方法

//kotlin文件名:MyUtils.kt
//kotlin类
class MyUtils {
    //类中的方法,使用时需要先创建归属的类
    fun show(info: String) {
        println(info)
    }
}

//kotlin文件中的方法,全局静态,只要不重名即可,写在哪里都一样
fun show122(info: String) {
    println(info)
}

KtClient.kt 用于演示kt如何调用kt文件中的方法,和类中的方法

//文件名KtClient,用于演示kt调用kt的方法

fun main() {

    //类中的方法一定要先调用这个类,再从这个类中调用其中的方法
    MyUtils().show("类中的方法")

    //文件中的方法可以直接调用,这个方法是全局静态的,只要全局不重名即可!!!!
    show122("文件中的方法")
}

 JavaClient.java用于演示Java如何调用kt文件中的方法和类中的方法

public class JavaClient {
    public static void main(String[] args) {
        //类中的方法,相当于Java类中的方法,需要先新建这个类
        new MyUtils().show("fun is in the class");

        //直接的方法,相当于文件类中的静态方法
        MyUtilsKt.show122("fun is out of class");
    }
}
方法中的类,其实编译后,会变成该kt文件名MyUtils+Kt的一个Java Class
* MyUtilsKt.java
* 在这个新类中有一个全局静态的方法,叫show122()
* 可以全局使用,只要不重名
*
* 假如你一定要试试两个kt文件中写相同名称的fun,
* 试想,编译后,会有两个文件名+Kt的类中的两个方法,
* 但是在你写这个方法的时候就会报错了,还不等编译,不信你可以试试
*
* 总结:Kt文件,就是,文件里边有类,方法写在类中,就根据类来调用这个方法;1,kt中调用:类.方法;2,Java中调用:类.方法
* 如果文件里边没有类,只有方法,就会生成一个用文件名+Kt的Java类,里边的方法都是全局静态类;1,kt中调用:直接方法名;2,Java中调用:文件名+Kt类.方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你封装一个长按后可以上下拖动item的方法,实现更换item位置的功能。 首先,我们需要使用RecyclerView和ItemTouchHelper来实现拖拽交换位置的功能。具体步骤如下: 1. 首先,在布局xml文件将RecyclerView控件放置到你想要放置的位置,并指定其唯一的id。 2. 在Activity(或Fragment)找到RecyclerView控件,并为其设置LayoutManager和Adapter,以及注册ItemTouchHelper。 ``` val recyclerView: RecyclerView = findViewById(R.id.recyclerView) recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.adapter = NoteFolderAdapter(dataList) val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int { val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN val swipeFlags = 0 return makeMovementFlags(dragFlags, swipeFlags) } override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { val from = viewHolder.adapterPosition val to = target.adapterPosition Collections.swap(dataList, from, to) recyclerView.adapter?.notifyItemMoved(from, to) return true } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {} }) itemTouchHelper.attachToRecyclerView(recyclerView) ``` 这里的dataList是从数据库查询出来的NoteFolderEntity实体列表,你需要自定义NoteFolderAdapter来为RecyclerView提供数据。 3. 最后,为RecyclerView的item设置长按事件,当长按时让ItemTouchHelper开始工作即可。 ``` holder.itemView.setOnLongClickListener { itemTouchHelper.startDrag(holder) true } ``` 这里的holder是RecyclerView.ViewHolder的子对象。在它的onBindViewHolder方法,我们需要将每一个item的View绑定到该ViewHolder,以便我们使用它来处理长按事件。 整个实现过程就是这样,下面是完整的kotlin代码: ``` class NoteFolderAdapter(private val dataList: MutableList<NoteFolderEntity>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_note_folder, parent, false) return NoteFolderHolder(view) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val data = dataList[position] holder.itemView.tvFolderName.text = data.folderName holder.itemView.setOnLongClickListener { itemTouchHelper.startDrag(holder) true } } override fun getItemCount(): Int { return dataList.size } class NoteFolderHolder(itemView: View) : RecyclerView.ViewHolder(itemView) private val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() { override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int { val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN val swipeFlags = 0 return makeMovementFlags(dragFlags, swipeFlags) } override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { val from = viewHolder.adapterPosition val to = target.adapterPosition Collections.swap(dataList, from, to) recyclerView.adapter?.notifyItemMoved(from, to) return true } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {} }) init { itemTouchHelper.attachToRecyclerView(recyclerView) } } ``` 使用方法: 1. 在Activity(或Fragment)查询数据库,获取Flow<List<NoteFolderEntity>>型的数据流。 2. 创建一个NoteFolderAdapter对象,将查询结果列表作为参数传入。 ``` val dataList = mutableListOf<NoteFolderEntity>() val adapter = NoteFolderAdapter(dataList) ``` 这里的dataList是一个MutableList型的列表,它将作为NoteFolderAdapter的参数传入。注意,这里的adapter对象并没有设置给RecyclerView,我们需要将其与RecyclerView进行绑定,以便在屏幕上显示出来。 3. 将RecyclerView和adapter控件进行绑定。 ``` val recyclerView: RecyclerView = findViewById(R.id.recyclerView) recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.adapter = adapter ``` 至此,长按可以上下拖动item的功能就实现了。通过以上步骤,我们结合了RecyclerView和ItemTouchHelper两个工具,创建了一个定义的NoteFolderAdapter,实现了长按拖拽交换位置的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值