LiiYuan

导航

 

我的问题是缓存导致的,
文件->清除缓存->清楚并重启


头一次用,我也不知道为什么是缓存问题。

官方文档链接:https://developer.android.com/topic/libraries/view-binding?hl=zh-cn
官方博客链接:https://medium.com/androiddevelopers/use-view-binding-to-replace-findviewbyid-c83942471fc
但是有网络要求

配置binding,类似插件?

首先,在build.gradle.kts中声明"插件"

android{
...
buildFeatures {viewBinding= true}
}

使用

忽略

某个布局文件不想用它,把tools:viewBindingIgnore="true" 属性添加到该布局文件的根视图中:

<LinearLayout  
        tools:viewBindingIgnore="true" >       
</LinearLayout>

全局和非全局

非全局

然后用,在activity文件中,使用

class FirstActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);

//        val button1: Button = findViewById(R.id.button1)
        val binding1 = FirstLayoutBinding.inflate(layoutInflater)
        binding1.button1.setOnClickListener {
            Toast.makeText(this, "You click Button 1", Toast.LENGTH_LONG).show()
        }
//        setContentView(R.layout.first_layout)
        setContentView(binding.root)
    }
}

首先命名规则,如layout文件为first_layout,采用驼峰命名法,FirstLayout+Binding
在onCreate()中输入FirstLayoutBinding,as自动提示导入包
import com.example.activitytest.databinding.FirstLayoutBinding
这里没提示那就八成出错了,我是清理缓存

然后这个,不懂就这这来:FirstLayoutBinding.inflate(layoutInflater)
最后,也不用改就这么来:setContentView(binding.root)

全局

看着有点?反复初始化?kotlin语言决定
那就回退findViewById()也还能用

class FirstActivity : AppCompatActivity() {
    private lateinit var binding2: SecondLayoutBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        binding2 = SecondLayoutBinding.inflate(layoutInflater)
        binding2.button2.setOnClickListener {}
        setContentView(binding2.root)
    }
    fun func2(){
       binding2 = SecondLayoutBinding.inflate(layoutInflater)
    }
    fun func3(){
        val button1:Button=findViewById(R.id.button1);
    }
}

1
1
1
1
1
1
1
1

posted on 2024-02-23 18:37  李ly  阅读(85)  评论(0编辑  收藏  举报