findViewById在自定义视图中返回null

时间:2011-05-20 09:42:46

标签: android

好的,我已经读过自定义视图必须有一个带有AttributeSet的构造函数才能使findViewById()工作。我还没有看到任何实际的实现。

以下是我的代码: 我的自定义视图扩展了Horizo​​ntalScrollView:

public AnimatedMenuBar(Context context) {
        // TODO Auto-generated constructor stub
        this(context, null);
    }

    public AnimatedMenuBar(Context context, AttributeSet attrs) {
        // TODO Auto-generated constructor stub
        this(context, attrs, 0);
    }

    public AnimatedMenuBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        this.context = context;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.main, this);
        this.setHorizontalScrollBarEnabled(false);
    }

从我的主要活动:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testing);
        AnimatedMenuBar animatedMenuBar = (AnimatedMenuBar)findViewById(R.id.animatedMenuBar);
}

testing.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <com.pt.task.custommenubar.AnimatedMenuBar
        android:id="@+id/animatedMenuBar" android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content" >
    <LinearLayout android:id="@+id/horizontalLayout" android:orientation="horizontal"
        android:layout_width="fill_parent" android:layout_height="wrap_content">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/dummyTextView" android:padding="5dip"/>
    </LinearLayout>
</merge>

animatedMenuBar总是为空,有没有我错过的东西?

非常感谢!

2 个答案:

答案 0 :(得分:3)

我遇到过这样的错误。

  1. 尝试使用Project-clean。有时它会有所帮助。
  2. 如果AnimatedMenuBar insied custommenubar,则写com.pt.task.custommenubar $ AnimatedMenuBar
  3. 尝试在代码中的任何位置重命名AnimatedMenuBar。

答案 1 :(得分:2)

  不过,这可能不适合问   在这里,你能向我解释一下   我可以简单地绘制视图   在里面叫做inflate()   构造函数,没有返回   任何东西。 - Alvin然后

当您致电inflater.inflate(R.layout.main, this)时,inflater会让main.xml充气,并将充气的View放入自定义视图中的ViewGroup

它与活动

中的setContentView(R.layout.main)具有相同的效果