android - Kotlin - java.lang.IllegalStateException:ViewStub 必须有一个非空的 ViewGroup viewParent
问题描述
我正在使用 ViewStub 更改布局,并使用 Spinner 保持主布局的基础
这是代码:
val viewStub = findViewById<ViewStub>(R.id.layout_stub)
val layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
viewStub.layoutParams = layoutParams
viewStub.layoutResource = R.layout.activity_meccanica
viewStub.inflate()
//...set spinner adapter and itemSelectedListener
if (selectedItem == "ItemTwo") {
viewStub.layoutResource = R.layout.activity_termica
viewStub.inflate()
这是 activity_main 布局:
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e6e6e6"
android:minWidth="25dp"
android:id="@+id/rootLayout">
<ViewStub
android:id="@+id/layout_stub"
android:inflatedId="@+id/message_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.75" />
</LinearLayout>
这是activity_termica:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Termica"/>
</android.support.constraint.ConstraintLayout>
第一个viewStub.layoutResource
工作正常,但是当selectedItem == "ItemTwo"
与第二个viewStub.layoutResource
它崩溃给我这个错误:
java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
at android.view.ViewStub.inflate(ViewStub.java:287)
at fisicapp.arfmann.com.fisicapp.MainActivity$onCreate$1.onItemSelected(MainActivity.kt:39)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:934)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:923)
at android.widget.AdapterView.-wrap1(AdapterView.java)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:893)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
解决方案
尝试这个
val viewStub = findViewById<ViewStub>(R.id.layout_stub)
val layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
viewStub.layoutParams = layoutParams
if (selectedItem .equals("ItemTwo")) {
viewStub.layoutResource = R.layout.activity_termica
}
else{
viewStub.layoutResource = R.layout.activity_meccanica
}
viewStub.inflate()
推荐阅读
- javascript - 有没有办法确定 execCommand('bold') 现在是否正在执行?
- mysql - 如何最小化 SQL 查询以非常快速地给出输出?
- node.js - 如何在 Keystone.js 中对列表进行排序?
- mysql - 将图像保存到 mysql 数据库时出现问题。程序运行完美,没有错误
- python - 如何将 Python 中的正则表达式匹配到某个字符,如果不匹配则返回 None?
- parsing - 在 go 中解析 set-cookie 标头
- php - PHP时间不同
- azure - Microsoft Azure:API 访问错误 DisallowedOperation
- python - Matlab中巨大的HDF5文件并在Python中导入
- python - 在python 3中读取大数据文件