面试题答案
一键面试- 在Activity中绑定布局文件并获取视图元素:
- 首先,确保项目已开启视图绑定功能。在
build.gradle
文件中添加如下配置:
android { viewBinding { enabled = true } }
- 在Activity中,定义一个绑定类的成员变量。例如,假设布局文件为
activity_main.xml
,则生成的绑定类名为ActivityMainBinding
。
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 获取视图元素,例如一个TextView val textView = binding.textViewId } }
- 首先,确保项目已开启视图绑定功能。在
- 布局中有多个同名id的视图情况及解决:
- 情况:Kotlin视图绑定不允许布局中有多个同名id的视图。如果存在多个同名id的视图,在编译时会报错,提示
Found view with id... multiple times
。因为视图绑定生成的绑定类依赖唯一的id来准确映射视图,多个同名id会导致冲突。 - 解决方法:
- 修改id:为每个视图设置唯一的id,这是最直接有效的方法。例如,如果有多个
Button
视图原本id都为button_id
,将它们分别改为button1_id
、button2_id
等。 - 使用其他方式区分:如果不能修改id,可以通过在代码中使用
findViewById
结合视图的父布局等方式来区分。例如,如果这些同名id的视图都在一个LinearLayout
中,可以这样获取:
val linearLayout = findViewById<LinearLayout>(R.id.linear_layout_id) val firstView = linearLayout.findViewById<View>(R.id.same_id) val secondView = linearLayout.getChildAt(1) as? View // 如果知道第二个同名id视图的位置
- 修改id:为每个视图设置唯一的id,这是最直接有效的方法。例如,如果有多个
- 情况:Kotlin视图绑定不允许布局中有多个同名id的视图。如果存在多个同名id的视图,在编译时会报错,提示