首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PopupWindow中正确创建片段

在PopupWindow中正确创建片段
EN

Stack Overflow用户
提问于 2011-11-08 08:33:20
回答 1查看 15K关注 0票数 18

我是Android开发的新手,对如何完成我想要做的事情感到困惑。我做了一些关于片段的阅读和学习,这样我就可以在不同的屏幕尺寸设计之间分享布局和代码。我已经创建了几个片段,并成功地使用了它们。但我遇到了这样的情况:我想在手机上显示正常活动中的片段,但又想在平板电脑上显示PopupWindow中的片段(如果有更好的选择,也可以是类似的东西)。

我已经设法弄清楚了如何扩展片段,并在单击按钮时在PopupWindow中显示它。我的代码如下所示:

代码语言:javascript
复制
public void onClick(View v) {
    LayoutInflater inflater = (LayoutInflater) BrowsingActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View popupLayout = inflater.inflate(R.layout.serverconnection_fragment, null, false);
    connectionListPopup = new PopupWindow(popupLayout, 300, 470, true);
    connectionListPopup.showAtLocation(BrowsingActivity.this.findViewById(R.id.connectionListImage), Gravity.CENTER, 0, 0);
}

弹出窗口随即出现,其中包含在serverconnection_fragment.xml中描述的UI。问题是,通过这种方式创建它,片段类ServerConnectionFragment.java永远不会被实例化,因此我的UI中的列表中没有项,按钮上也没有侦听器,等等。对于我来说,似乎应该有一种方法来实例化java类,让它正常地膨胀片段并附加事件侦听器,然后将在那里创建的视图传递到PopupWindow构造函数中,但我不知道如何实现。有人能帮我吗?

仅供参考,我是为Android2.1使用Android-support-v4.jar文件为片段类构建的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-11 21:24:23

直接膨胀布局不会导致它实例化片段;Android只会认为这只是巧合,片段和活动都试图引用相同的布局文件。

通常,可以使用FragmentManager.add(int,Fragment)将片段添加到布局中。但是,您指定的容器id必须是当前Activity布局的一部分,而PopupWindow并非如此。相反,您必须在不指定容器的情况下将片段添加到片段管理器,然后在稍后的片段中(例如onStart()),您可以显示PopupWindow。这正是DialogFragment的工作方式,既然已经有了很多对它的支持,我建议您改用DialogFragment。

使用您的片段代码,只需扩展DialogFragment而不是片段,并使用DialogFragment.show(FragmentManager,String)来显示它。您可以通过在onCreate方法中调用setStyle(DialogFragment.STYLE_NO_FRAME, getTheme())来摆脱默认边框。您仍然可以将此片段添加到布局中(如您所说,在手机上,您不希望它显示为弹出窗口),它将按照您预期的方式工作。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8044593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档