Kotlin:指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

时间:2018-07-02 15:36:28

标签: android kotlin layout-inflater android-inflate kotlin-extension

谁能告诉我是什么问题。这是代码:

package com.mohdjey.user.inflate

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.strictmode.WebViewMethodCalledOnWrongThreadViolation
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.mohdjey.user.inflate.R.id.root_layout
import com.mohdjey.user.inflate.R.layout.activity_main
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*

 class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(activity_main)

    var inflater: LayoutInflater? = null
    var view: View? = null


 //   inflater.inflate(R.layout.child_layout_to_merge, parent_layout, true);
    view = inflater?.inflate(R.layout.another_view , null)

    val layout = findViewById<LinearLayout>(R.id.root_layout)

    layout.addView(layout)


} }

我正在练习布局膨胀。

我不知道该写些什么。

2 个答案:

答案 0 :(得分:1)

您要在此处将ID为LinearLayout的{​​{1}}作为自己的子项添加:

root_layout

也许您打算将刚膨胀的layout.addView(layout) 作为其子级添加?

View

答案 1 :(得分:0)

您的整个代码块应该只是

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(activity_main)
    val root = findViewById<LinearLayout>(R.id.root_layout)
    val view = layoutInflater.inflate(R.layout.another_view, root, false)
    root.addView(view)
}

话虽这么说,但不清楚为什么不将R.layout.another_view直接包含在主布局中。