1

新手来了 我被设计难住了,因为我的应用程序刚刚启动。我想在一个活动中创建一个弹出菜单(带有 ListView 的 PopupWindow),它生成 2 个 XML:一个用于我的活动,一个用于我的虚拟菜单(menu_dummy.xml)。现在的问题代码如下所示:

...

    mSet = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mPopup = mSet.inflate(R.layout.menu_dummy, null, false);
    Resources base = getResources();
    ListView m = (ListView)findViewById(R.id.menu_popup);
    String[] items = new String[]{base.getString(R.string.accounts), base.getString(R.string.about)};
    ArrayAdapter<String> lstItems = new ArrayAdapter<String>(this,
              android.R.layout.simple_list_item_1, android.R.id.text1, items);
    m.setAdapter(lstItems);

...

当我执行我的代码时,我发现 ListView m(menu_popup,在 menu_dummy.xml 下)总是返回 null,尽管它已在我的 R.java 中注册。我在这里错过了什么吗?

4

2 回答 2

0

我相信你正在膨胀布局,但你没有使用膨胀的布局来获取对 m 的引用。因此,Android 试图menu_popup在当前布局中查找并因此返回 null。

更改此部分:

ListView m = (ListView)findViewById(R.id.menu_popup);

至:

ListView m = (ListView)mPopup.findViewById(R.id.menu_popup);

现在,您应该获得对menu_popupwhich is under的引用,menu_dummy因为您将使用对menu_dummy存储在mPopup.

于 2012-11-19T15:15:25.863 回答
0

代替:

ListView m = (ListView)findViewById(R.id.menu_popup);

和:

ListView m = (ListView)mPopup.findViewById(R.id.menu_popup);
于 2012-11-19T15:04:13.637 回答