android - android.widget.LinearLayout 无法通过视图绑定强制转换为 android.widget.GridLayout
问题描述
如果您发现出了什么问题,请帮忙!
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding
lateinit var buttonBinding: LayoutButtonBinding
lateinit var textBinding: LayoutTextBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
textBinding = LayoutTextBinding.bind(binding.root)
buttonBinding = LayoutButtonBinding.bind(binding.root)
buttonBinding.btnOne.setOnClickListener {
Toast.makeText(this, "Button Clear Clicked", Toast.LENGTH_SHORT).show()
}
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical"
tools:context=".MainActivity">
<include
layout="@layout/layout_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom">
<include
layout="@layout/layout_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</LinearLayout>
</LinearLayout>
布局按钮.xml
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:columnCount="4"
android:orientation="vertical"
android:rowCount="5">
<Button
android:id="@+id/btn_clear"
style="@style/CalButtonFunctional"
android:layout_column="0"
android:layout_row="0"
android:text="C" />
<Button
android:id="@+id/btn_percentage"
style="@style/CalButtonFunctional"
android:layout_column="1"
android:layout_row="0"
android:text="%" />
<Button
style="@style/CalButtonFunctional"
android:layout_column="2"
android:layout_row="0"
android:text="B" />
<Button
android:id="@+id/btn_divide"
style="@style/CalButtonArithmatic"
android:layout_column="3"
android:layout_row="0"
android:text="/" />
<Button
android:id="@+id/btn_seven"
style="@style/CalButtonFunctional"
android:layout_column="0"
android:layout_row="1"
android:text="7" />
<Button
android:id="@+id/btn_eight"
style="@style/CalButtonFunctional"
android:layout_column="1"
android:layout_row="1"
android:text="8" />
<Button
android:id="@+id/btn_nine"
style="@style/CalButtonFunctional"
android:layout_column="2"
android:layout_row="1"
android:text="9" />
<Button
android:id="@+id/btn_multply"
style="@style/CalButtonArithmatic"
android:layout_column="3"
android:layout_row="1"
android:text="x" />
<Button
android:id="@+id/btn_six"
style="@style/CalButtonFunctional"
android:layout_column="0"
android:layout_row="2"
android:text="6" />
<Button
android:id="@+id/btn_five"
style="@style/CalButtonFunctional"
android:layout_column="1"
android:layout_row="2"
android:text="5" />
<Button
android:id="@+id/btn_four"
style="@style/CalButtonFunctional"
android:layout_column="2"
android:layout_row="2"
android:text="4" />
<Button
android:id="@+id/btn_minus"
style="@style/CalButtonArithmatic"
android:layout_column="3"
android:layout_row="2"
android:text="-" />
<Button
android:id="@+id/btn_three"
style="@style/CalButtonFunctional"
android:layout_column="0"
android:layout_row="3"
android:text="3" />
<Button
android:id="@+id/btn_two"
style="@style/CalButtonFunctional"
android:layout_column="1"
android:layout_row="3"
android:text="2" />
<Button
android:id="@+id/btn_one"
style="@style/CalButtonFunctional"
android:layout_column="2"
android:layout_row="3"
android:text="1" />
<Button
android:id="@+id/btn_plus"
style="@style/CalButtonArithmatic"
android:layout_column="3"
android:layout_row="3"
android:text="+" />
<Button
android:id="@+id/btn_equal"
style="@style/CalButtonArithmatic"
android:layout_column="3"
android:layout_row="4"
android:text="=" />
<Button
android:id="@+id/btn_doubleZero"
style="@style/CalButtonFunctional"
android:layout_column="0"
android:layout_row="4"
android:text="00" />
<Button
android:id="@+id/btn_zero"
style="@style/CalButtonFunctional"
android:layout_column="1"
android:layout_row="4"
android:text="0" />
<Button
android:id="@+id/btn_dot"
style="@style/CalButtonFunctional"
android:layout_column="2"
android:layout_row="4"
android:text="." />
</GridLayout>
布局文本.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:id="@+id/textViewCalculations"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1+2+2"
android:textAlignment="textEnd"
android:textSize="30sp" />
<TextView
android:id="@+id/textCalResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="40"
android:textAlignment="textEnd"
android:textSize="40sp" />
</LinearLayout>
遇到的问题:应用程序因异常而崩溃: android.widget.LinearLayout在第 21 行的活动中绑定 button_layout 时无法转换为 android.widget.GridLayout
buttonBinding = LayoutButtonBinding.bind(binding.root)
解决方案
这不是你应该如何使用LayoutButtonBinding
and LayoutTexBinding
。我们需要为包含的部分分配一个 id,这样在 ActivityMainBinding 中我们将可以访问它们各自的绑定。
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.layoutButton.btnOne.setOnClickListener {
Toast.makeText(this, "Button Clear Clicked", Toast.LENGTH_SHORT).show()
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<include
android:id="@+id/layout_text"
layout="@layout/layout_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom">
<include
android:id="@+id/layout_button"
layout="@layout/layout_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</LinearLayout>
推荐阅读
- python - 坐标函数更新列表并存储它们以被调用
- html - 无需使用 CSS 或 JS 即可创建 SVG 饼图的数学
- python - 使用现有 TimeSerie 中的索引和另一个 TimeSerie 中的列在 Pandas 中创建一个 DataFrame
- azure - 向 Azure Device Streams 添加身份验证
- javascript - Nodejs,尝试将var导出到另一个文件但值没有改变
- python - (Python)脚本可以永久编辑我的系统路径变量吗?
- spring-boot - SpringDoc openAPI 工具未扫描 Spring Boot 项目中的 API
- android - 将 Retrofit/OkHttp 限制为仅 Https
- vue.js - Vuepress 自定义主题和 postcss
- bash - $ mvn -v – 找不到命令