Android 在弹出窗口中正确创建片段

Android 在弹出窗口中正确创建片段,android,android-fragments,popupwindow,Android,Android Fragments,Popupwindow,我是Android开发的新手,对如何完成我想做的事情感到困惑。我已经阅读和学习了一些片段,这样我就可以在各种屏幕大小的设计之间共享布局和代码。我已经创建了一些片段,并成功地使用了它们。但我有一种情况,我想在手机上显示正常活动中的片段,但想在平板电脑上显示弹出窗口中的片段(如果有更好的选择,也可以是类似的) 我已经设法弄清楚了如何在点击按钮时将碎片膨胀并显示在弹出窗口中。我的代码如下所示: public void onClick(View v) { LayoutInflater infla

我是Android开发的新手,对如何完成我想做的事情感到困惑。我已经阅读和学习了一些片段,这样我就可以在各种屏幕大小的设计之间共享布局和代码。我已经创建了一些片段,并成功地使用了它们。但我有一种情况,我想在手机上显示正常活动中的片段,但想在平板电脑上显示弹出窗口中的片段(如果有更好的选择,也可以是类似的)

我已经设法弄清楚了如何在点击按钮时将碎片膨胀并显示在弹出窗口中。我的代码如下所示:

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构造函数,但我不知道如何实现。有人能帮我吗


仅供参考,我正在使用片段类的Android-support-v4.jar文件为Android 2.1构建它。

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

通常,您将使用向布局添加片段。但是,您指定的容器id必须是当前活动布局的一部分,而
PopupWindow
的情况并非如此。相反,您必须在不指定容器的情况下将片段添加到片段管理器中,然后稍后在片段中(例如,
onStart()
)可以显示一个弹出窗口。这正是
DialogFragment
的工作原理,因为已经有很多人支持它,我建议您改用DialogFragment


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

答案肯定正确,另外,感谢您,当我们在弹出窗口中显示列表时,它拒绝显示我们为列表指定的上下文菜单。切换到DialogFragment让我们能够解决这个问题。请您解释或举例说明您的最后一句话,如果可能的话,将片段添加到弹出窗口,作为初始示例?“您仍然可以将此片段添加到布局中(正如您所说,在手机上,您不希望它显示为弹出窗口),它将按照您的预期工作。”@JPMagalhaes,Strong建议不要在PopupWindow中使用fragment,因为它可能会导致内存泄漏问题。我们可以为像PopupWindow这样的对话框fragment实现拖放功能吗?这将如何解决使用PopupWindow提供的相对视图定位问题?