我已经阅读了与此相关的所有其他问题,并且大多数答案都是指所有视图,问题通常在于所有视图,但是如果我在代码中的同一位置调用findviewbyid作为内置视图,那么返回视图,但如果我为自定义视图调用它,它只返回null。两个视图都在同一个地方,在相同的布局中,有ID,它们是布局xml文件中的碳副本。我正确地覆盖了每个中的customView调用super(...)的所有构造函数。我在setContentView
之后调用findViewById,并在Activity类中调用。
我的问题是,除了覆盖构造函数之外,还需要对自定义视图做什么以允许函数findViewByID找到它?必须要有一些东西缺失。
protected void initClickCounter() {
numberClicks = new DigitViewGroup(this);
ImageDigitView v1;
ImageView v2;
v1 = (ImageDigitView) findViewById(R.id.imageViewDigit1);
v2 = (ImageView) findViewById(R.id.imageViewDigit1_2);
v1始终为null,而v2永远不为空。
<com.bilowik.debugg.ImageDigitView
android:id="@+id/imageViewDigit1"
android:layout_width="10dp"
android:layout_height="14dp"
android:layout_gravity="bottom"
android:layout_marginBottom="60dp"
android:layout_marginStart="103dp"
android:contentDescription="@string/digit1"
app:srcCompat="@drawable/digit_0" />
<ImageView
android:id="@+id/imageViewDigit1_2"
android:layout_width="10dp"
android:layout_height="14dp"
android:layout_gravity="bottom"
android:layout_marginBottom="60dp"
android:layout_marginStart="103dp"
android:contentDescription="@string/digit1"
app:srcCompat="@drawable/digit_0" />
除了ID之外,它们是相同的。
public ImageDigitView(Context context) {
super(context);
init(context);
}
public ImageDigitView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
init(context);
}
public ImageDigitView(Context context, AttributeSet attributeSet, int defStyle) {
super(context, attributeSet, defStyle);
init(context);
}
ImageDigitView类的构造函数。
答案 0 :(得分:1)
使用类似这样的例子:
View yourviewname = inflater.inflate(R.layout.yourlayout, container, false);
Button expandableButton = (Button)yourviewname.findViewById(R.id.expandableButton1);
答案 1 :(得分:0)
获取布局的 rootView ,从中可以解决。 在片段中:
View rootView = inflater.inflate(R.layout.some_x_layout, container, false);
TextView tv = (TextView)rootView.findViewById(R.id.tv);