在PopupWindow中正确创建片段

Mar*_*sch 17 android popupwindow android-fragments

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

我已经设法弄清楚如何膨胀片段并在单击按钮时在PopupWindow中显示它.我的代码看起来像这样:

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);
}
Run Code Online (Sandbox Code Playgroud)

弹出窗口显示并包含serverconnection_fragment.xml中描述的UI.问题是通过这种方式创建,Fragment类ServerConnectionFragment.java永远不会被实例化,因此我的UI中的列表中没有项目,按钮上没有监听器,等等.似乎应该有一种方法让我实例化java类,让它正常膨胀片段并附加事件监听器,然后将创建的视图传递给PopupWindow构造函数,但我无法弄清楚如何.谁能帮我吗?

仅供参考,我正在使用Android-support-v4.jar文件为Fragment类构建Android 2.1.

ant*_*nyt 18

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

通常,您将使用FragmentManager.add(int,Fragment)将片段添加到布局中.但是,您指定的容器ID必须是当前Activity的布局的一部分,而a不是这种情况PopupWindow.相反,您必须将片段添加到片段管理器而不指定容器,然后在片段中稍后(例如onStart())您可以显示PopupWindow.这正是如何DialogFragment工作的,并且由于已经有很多支持,我建议你切换到使用DialogFragment.

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