面试题答案
一键面试在Kotlin Android扩展插件中,不能直接处理布局文件中多个同名id的视图。因为Kotlin Android扩展插件是基于视图id生成绑定代码的,同名id会导致生成代码时产生冲突。
通常建议避免在布局文件中使用多个同名id。如果确实有这种需求,可以使用findViewById
的方式来分别获取这些视图。例如:
- 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/same_id_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个文本" />
<TextView
android:id="@+id/same_id_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个文本" />
</LinearLayout>
- Kotlin代码:
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView1 = findViewById<TextView>(R.id.same_id_text)
val textView2 = findViewById<TextView>(R.id.same_id_text)
// 此时textView1和textView2获取到的可能是同一个视图或者根据布局加载顺序获取不同视图(不推荐这种获取方式)
// 具体行为依赖于Android系统在这种不规范情况下的处理逻辑
}
}
为了代码的清晰和可维护性,应避免这种情况,为每个视图赋予唯一的id。例如:
- 修改后的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text_view_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个文本" />
<TextView
android:id="@+id/text_view_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个文本" />
</LinearLayout>
- Kotlin代码:
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView1 = text_view_1
val textView2 = text_view_2
// 这样通过Kotlin Android扩展插件可以清晰地获取到不同的视图
}
}