Android:findViewById返回null

时间:2013-07-09 10:59:10

标签: android android-layout android-linearlayout

我为我的Activity创建了一个动态创建的布局(不要问我为什么,这不是我的项目,但我被要求编辑一下)。我正在尝试添加另一个布局,一种状态栏。我添加了第二个布局的XML布局,这就是代码的样子:

AbsoluteLayout basicLayout = new AbsoluteLayout(this);
basicLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

setContentView(basicLayout);

LinearLayout logo_layout = (LinearLayout) findViewById(R.id.layout_logo);
Button back = (Button) findViewById(R.id.button_back);
Button options = (Button) findViewById(R.id.button_menu);

但findViewById返回null,每当我尝试使用LinearLayout内的两个按钮执行某些操作时,会导致NullPointerExceptions。我试图清理项目,但没有帮助。感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

您将setContentView()设为basicLayout

因此您的layout永远不会被初始化,而buttonslayouts都是null

尝试setContentView(R.layout.XML_LAYOUT_CONTAINING_YOUR_BUTTON);

修改    使用布局Inflater

    setContentView(basicLayout);

    //create a view to inflate the layout from the xml
    View view = getLayoutInflater().inflate(R.layout.XML_LAYOUT, basicLayout,false); 

    //add the view to the basic layout
    basicLayout.addView(view);

    LinearLayout logo_layout = (LinearLayout) view.findViewById(R.id.layout_logo);
    Button back = (Button) view.findViewById(R.id.button_back);
    Button options = (Button) view.findViewById(R.id.button_menu);

答案 1 :(得分:0)

如果按钮位于logo_layout中,则需要在该特定布局中进行搜索。

Button back = (Button) logo_layout.findViewById(R.id.button_back);