在我的foo_layout.xml文件中,我有一个子类RelativeLayout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.android.myapp.FooView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/pegboard_table"
android:orientation="vertical"
android:scaleType="fitXY"
>
<ImageView
android:id="@+id/triangular"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/pegboard_board"
android:scaleType="fitXY"
android:gravity="center"
android:visibility="invisible"
/>
<Chronometer
android:id="@+id/timer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/timer_display"
android:textSize="40sp"
android:textColor="#000"
android:layout_alignParentTop="true"
android:gravity="center"
android:visibility="invisible"/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/board_table"
android:visibility="invisible"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:background="@drawable/tab_bar">
<!-- android:layout_alignLeft="@id/options_tab"-->
<ImageView
android:id="@+id/game_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/game_select" android:paddingLeft="15sp"/>
<ImageView
android:id="@+id/undo_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/game_select"
android:layout_weight="1"
android:src="@drawable/undo"
/>
<ImageView
android:id="@+id/settings_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/undo_select"
android:layout_weight="1"
android:src="@drawable/settings"
/>
<ImageView
android:id="@+id/info_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/settings_select"
android:layout_weight="1"
android:src="@drawable/info"
/>
</LinearLayout>
</com.android.myapp.FooView>
</FrameLayout>
然后我有一个扩展类的java文件FooView.java RelativeLayout的。
package com.android.myapp;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
public class FooView extends RelativeLayout {
public FooView(Context context) {
super(context);
fillTable();
// TODO Auto-generated constructor stub
}
public FooView(Context context, AttributeSet attrs) {
super(context, attrs);
fillTable();
// TODO Auto-generated constructor stub
}
public FooView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
fillTable();
// TODO Auto-generated constructor stub
}
public void fillTable() {
int board = this.getChildCount();
View boardView = findViewById(R.id.board_table);
if (board > 0)
;
}
}
董事会总是0。 boardView始终为null。
这似乎不是正确的行为。我已经尝试了FooView层次结构中的其他视图,findViewById()总是返回null。
对于我的生活,我无法弄清楚我做错了什么。
答案 0 :(得分:1)
首先,您的小部件正在尝试引用自身之外的小部件。调用findViewById()
将为您的小部件提供孩子,而不是布局中其他位置的小部件。
其次,您正尝试从构造函数中执行此操作。那不安全。请等到onFinishInflate()
。
第三,您可能不希望在其他小部件的R.id
值中进行硬连线,但允许通过视图属性或设置器对这些小部件进行配置。要根据配置的ID访问这些小部件,您可以致电findViewById()
而不是自己,而是通过getContext()
获取的活动。
答案 1 :(得分:0)
在构造函数中使用view.setlayout添加图像视图和计时器视图之前,它们不是自定义视图的一部分。