0

目前我正在开发一个供我自己使用的库。我在这个库中的类被称为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?

4

3 回答 3

2

您应该先膨胀一个包含以下内容的 xml menu_listview

LayoutInflater inflater = LayoutInflater.from(context);

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

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

这只是概念,我没有对此进行测试,所以它可能不起作用。您还需要有一个上下文。

于 2013-02-25T08:49:38.097 回答
1

in的setContentView()方法很重要,因为它用于扩展布局并在对象中收集其视图和资源。但是,虽然创建一个单独的类并直接使用 id 不会使您的布局膨胀,所以有 3 种方法可以做到这一点onCreateactivity

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

2)膨胀布局

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

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

LayoutInflater mInflater= (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View externalView = mInflater.inflate(R.layout.your_layout_containing_listview, null);
 ListView listView = (ListView) externalView .findViewById(R.id.menu_listview);

选择最适合您的代码的

于 2013-02-25T08:52:42.763 回答
0

可能有几个原因:

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

  2. Idmenu_listview不存在于R.layout.***Activity 膨胀的布局中。

  3. 您指R的是错误的包(应用程序与库)。

于 2013-02-25T08:54:42.597 回答