Android findViewById返回null,但仅适用于我的自定义视图

时间:2014-06-09 19:08:09

标签: android

我有一个活动,上面有一个按钮:

<Button
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_alignParentTop="true"
    android:id="@+id/some_id" />

我可以从活动的来源中找到它:

button = (Button)findViewById(R.id.some_id); // returns the button

但如果我切换自定义控件的按钮:

<FancyButton
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_alignParentTop="true"
    android:id="@+id/some_id" />

然后我开始变为null:

fancyButton = (FancyButton)findViewById(R.id.some_id); // returns null

目前,花式按钮实际上只是一个空视图,所以我不确定是什么原因会导致它失败:

public FancyButton(Context context, AttributeSet attrs) {
    super(context);

    LayoutInflater.from(context).inflate(R.layout.fancy_button, this, true);
}

我绝对错过了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

我忘了将attributes参数转发给基础构造函数。由于id是一个属性,它最终会掉落在地板上而不是设置。

错:

public FancyButton(Context context, AttributeSet attrs) {
    super(context);

右:

public FancyButton(Context context, AttributeSet attrs) {
    super(context, attrs);

启用&#34;未使用的参数&#34;警告可以更快地抓住这个。