[Android]使用View Binding 替代findViewById

1.配置

build.gradle文件中添加配置,然后同步。

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

2.用 View Binding 类来访问布局中的视图

在Activity代码的顶部导入生成的 View Binding 类:

import com.example.yourapp.databinding.ActivityMainBinding

在活动类中创建一个 View Binding 对象,并使用 inflate方法获取绑定的视图:

private lateinit var binding: ActivityMainBinding

在活动的 onCreate 方法中,使用 setContentView 方法设置活动的视图,并使用 View Binding 对象获取根视图:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    // 现在您可以使用 binding 对象访问布局中的视图
    binding.textView.text = "Hello, World!"
}

3. 在Fragment中使用View Binding

在Fragment中,你可以在onCreateView中使用View Binding:

class MainFragment : Fragment() {

    private var _binding: FragmentMainBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentMainBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.someView.text = "Hello, World!"
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

在Fragment中,我们需要在onDestroyView中设置_binding为null,这是因为视图可能在Fragment销毁之前就被销毁了,所以我们需要避免在Fragment和视图之间产生内存泄漏。

4.忽略View Binding

如果布局文件不需要生成绑定类,可以将 tools:viewBindingIgnore="true" 属性添加到该布局文件的根视图中:

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

猜你喜欢

转载自blog.csdn.net/u012881779/article/details/134409016