Kotlin: у указанного дочернего элемента уже есть родитель. Сначала вы должны вызвать removeView() для родителя дочернего элемента.

Может ли кто-нибудь сказать мне, в чем проблема? Это код:

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)


} }

Я практикую надувание макета.

Я не знаю, что написать.


person Jeylani Osman    schedule 02.07.2018    source источник
comment
проверьте attachToRoot и установите его на false в inflater?.inflate(R.layout.another_view, null, false)   -  person HawkPriest    schedule 02.07.2018


Ответы (2)


Вы пытаетесь добавить LinearLayout с идентификатором root_layout в качестве собственного дочернего элемента здесь:

layout.addView(layout)

Возможно, вы хотели добавить свой недавно надутый View в качестве его дочернего элемента?

layout.addView(view)
person zsmb13    schedule 02.07.2018
comment
Он показывает другую ошибку. Невозможно добавить нулевое дочернее представление в ViewGroup. - person Jeylani Osman; 02.07.2018
comment
Если это весь ваш код, это потому, что вы еще не инициализировали inflater. Вы можете сделать это, например, с inflater = LayoutInflater.from(this), так как вы находитесь в Activity. - person zsmb13; 02.07.2018
comment
Еще лучше, вы можете просто использовать свойство layoutInflater (из java-активности getLayoutInflater). Это будет ненулевое значение. - person Brian Yencho; 03.07.2018

Весь ваш блок кода должен быть просто

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 непосредственно в свой основной макет.

person Brian Yencho    schedule 03.07.2018