在库项目中膨胀ListView时出现Nullpointer异常

时间:2013-02-25 08:42:31

标签: android

目前我正在开发一个供我自己使用的库。我在这个库中的类称为BaseWindow,我的库项目也将SlidingMenu项目作为库包含在内。当我尝试从布局文件夹中获取NullPointerException时,我得到listView。我的班级是这样构建的:

public class BaseWindow extends SlidingFragmentActivity {

    private String windowTitle; 
    private int menuResourceId;

    /**
     * @param layoutResourceId identificator of the layout to inflate(R.layout.your_layout)
     * @param menuResourceId identification of the menu to inflate(R.layout.your_menu)
     * @param windowTitle title of this window
     */
    public void InitializeWindow(int layoutResourceId, int menuResourceId, String windowTitle)  {

     ...........
     ListView lv = (ListView)findViewById(R.id.menu_listview); 

    }   

}

我知道像这样的东西应该用onCreate方法完成。但有可能在外面这样做,就像我一样吗?当我将鼠标指针放在findViewById方法上时,它确实引用了我的超类中的方法

View com.slidingmenu.lib.app.SlidingFragmentActivity.findViewById(int id)

SlidingFragmentActivity类扩展了SherlockFragmentActivity

有人知道导致问题的原因吗?我是我的lv对象。空值?如何从这个库类中获取正确的ListView?

3 个答案:

答案 0 :(得分:2)

您应首先对包含menu_listview的xml进行充气:

LayoutInflater inflater = LayoutInflater.from(context);

View view = inflater.inflate(R.layout.xml_containing_listview);

ListView lv = (ListView) view.findViewById(R.id.menu_listview);

这只是一个概念,我没有对此进行测试,因此可能无效。你还需要有一个上下文。

答案 1 :(得分:1)

setContentView()onCreate的{​​{1}}方法非常重要,因为它用于扩充布局并在对象中收集其视图和资源。但是,虽然创建一个单独的类并直接使用id不会使您的布局膨胀,因此有三种方法可以这样做

1)将列表视图直接传递给非活动方法

的方法

2)充气布局

activity

3)直接膨胀布局并使用它

LayoutInflater inflater = LayoutInflater.from(context);
View externalView = inflater.inflate(R.layout.your_layout_containing_listview);
ListView listView = (ListView) externalView .findViewById(R.id.menu_listview);

选择最适合您代码的内容

答案 2 :(得分:0)

可能有以下几个原因:

  1. InitializeWindow()setContentView()之前被调用,活动还没有布局。

  2. ID menu_listviewR.layout.***布局中不存在由活动充气。

  3. 您从错误的包(App vs Library)中引用R