代码之家  ›  专栏  ›  技术社区  ›  Arfmann

Kotlin-java.lang.IllegalStateException:ViewStub必须具有非空的ViewGroup viewParent

  •  0
  • Arfmann  · 技术社区  · 6 年前

    我使用ViewStub更改布局,微调器保持主布局的基础

    代码如下:

         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() 
    

    这是活动单元的主布局:

        <?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>
    

    这是一项活动_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)
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Mohammad Rbabah    6 年前

    试试这个

    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()