kotlin-解决在非Activity,Fragment,view中无法自动绑定id(kotlin-android-extensions)

首先Kotlin自带了资源绑定功能,类似与ButterKnife的@BindView

在资源文件中定义好id




    

    
    

activity中就可以直接根据id来对控件进行操作

class UserListActivity : AppCompatActivity() {
    private var adapter = UserAdapter()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.user_list_activity)
        recyclerview.adapter = adapter
        recyclerview.addItemDecoration(
            androidx.recyclerview.widget.DividerItemDecoration(
                this,
                androidx.recyclerview.widget.DividerItemDecoration.VERTICAL
            )
        )
        add.setOnClickListener {
            startActivity(Intent(this,EditUserActivity::class.java ))
        }
    }
}

上面对教程肯定都一大堆了,就不废话了。

重点是像viewholder这种不属于activity,fragment,view的直接打id名称也是不行的。

直接引用 kotlinx.android.synthetic.xxx.xx也是不行的

对于这个问题其实官方早就给出答案了
kotlin-解决在非Activity,Fragment,view中无法自动绑定id(kotlin-android-extensions)_第1张图片

就是要用到LayoutContainer,直接继承你又会发现找不到这个类。

因为还需要在app的build.gradle中添加

apply plugin: 'kotlin-android-extensions'
   androidExtensions {

        experimental = true
    }

 

然后就可以愉快的使用id了

下面是我自己的viewholder

class UserViewHolder : androidx.recyclerview.widget.RecyclerView.ViewHolder,LayoutContainer
{
    override val containerView: View?

    constructor(parent :View) : super( LayoutInflater.from(parent!!.context).inflate(
        R.layout.user_viewholder,
        parent as ViewGroup,
        false
    )) {

        containerView = itemView
    }

    fun setData(user: User) {
        vvh_name.text = user.name
        vvh_phone.text = user.phone

    }
}

参考链接 https://kotlinlang.org/docs/tutorials/android-plugin.html

你可能感兴趣的:(android)