gpt4 book ai didi

java - 尝试创建扩展constraintlayout的自定义布局

转载 作者:行者123 更新时间:2023-12-01 18:09:32 26 4
gpt4 key购买 nike

所以我有这个自定义布局。

public class MyCustomView extends ConstraintLayout {
private Button myFancyButton;
public MyCustomView (@NonNull Context context, AttributeSet attrs) {
super(context,attrs);
myFancyButton = findViewById(R.id.button); //THIS IS NULL
}
public void init(){
myFancyButton = findViewById(R.id.button); //WORKS GREAT
}
}

问题是我宁愿不创建一个函数“init”来完成适合构造函数的工作。我面临的问题是在构造函数中调用 findViewById 导致它为空。在 MyCustomView 对象上使用 init 函数效果很好。但我更愿意在构造函数中执行此操作。

相应的 XML 文件如下所示。

<?xml version="1.0" encoding="utf-8"?>
<se.test.test.test.MyCustomView xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent">

<Button
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="B1"
android:textSize="30sp"/>

</se.test.test.test.MyCustomView>

最佳答案

您需要将该代码放入 onFinishInflate() 中 - 当布局及其子级膨胀时调用该方法。

@Override
public void onFinishInflate() {
myFancyButton = findViewById(R.id.button)
}

https://developer.android.com/reference/android/view/View#onFinishInflate()

关于java - 尝试创建扩展constraintlayout的自定义布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60492447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com