问题描述
<span class="col-md-2" id="hospital-icon-jquery"> <i class="fas fa-hospital cc_cursor" ></i>
我在下面的表单中使用我的自定义视图。
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
class MyCustomView @JvmOverloads constructor(context: Context,attributeSet: AttributeSet? = null) : FrameLayout(
context,attributeSet
) {
val binding = MylayoutBinding.inflate(
LayoutInflater.from(context),this,true
)
}
// mylayout.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<merge>
<FrameLayout
android:id="@+id/myChildContainer"
android:layout_width="100dp"
android:layout_height="100dp"/>
</merge>
</layout>
在上面的示例中,我希望 myButton 作为 myChildContainer 的子项进入 MyCustomView。
我遵循了 android: how to add children from an xml layout into a custom view 中的示例并修改了 MyCustomView,如下所示。
// myactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent">
<MyCustomView
android:id="@+id/myView"
android:layout_width="300dp"
android:layout_height="300dp">
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</MyCustomView>
</FrameLayout>
</layout>
如果我不应用数据绑定,这段代码就可以了。
问题是当我应用数据绑定时应用程序崩溃了。
class MyCustomView @JvmOverloads constructor(context: Context,true
)
override fun onFinishInflate() {
super.onFinishInflate()
while (childCount > 1) {
val child = getChildAt(1)
val param = child.layoutParams
removeView(child)
binding.myChildContainer.addView(child,param)
}
}
}
internal class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<MyactivityBinding>(this,R.layout.myactivity)
binding.myButton.text = "Test Text" <-- crash
}
}
当我把代码的remove view和addview的执行点从onFinishInflate改成onAttachedToWindow时,一般不会出现这个错误,但是我已经确认是间歇性的重复出现,所以我认为这不是一个解决方案。
我实际上使用了多个这样的视图,所以我不想在 setContentView 之后调用像 myView.sortView() 这样的单个函数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)