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方法.您仍然可以将此片段添加到布局中(正如您所说,在手机上您不希望它显示为弹出窗口),它将按照您的预期工作.
| 归档时间: |
|
| 查看次数: |
13802 次 |
| 最近记录: |