我想在对话框内以及活动中使用片段。因此,该片段来自DialogFragment
。
现在的问题是,只要片段覆盖onCreateView()
和onCreateDialog()
方法,将片段显示为对话框就会与android.util.AndroidRuntimeException: requestFeature() must be called before adding content
崩溃。
如果onCreateView()
被删除,则显示为对话框效果不错,但将片段嵌入活动中时,会遇到java.lang.IllegalStateException: Fragment com.blah.SomeFragment did not create a view.
删除onCreateDialog()
将是一个解决方案,但是对话框按钮应该在哪里接线?
现在,我完全不知道如何在两种情况下使用相同的DialogFragment
派生类 - 在对话框内和活动内 - 并不是DialogFragment
所有关于DialogFragment
的内容?我有点不明白......使用import pandas as pd
from pandas import Timestamp
times = pd.Series([Timestamp('2015-11-27 00:00:00.540000'), Timestamp('2015-11-27 00:00:00.699000'), Timestamp('2015-11-27 00:00:01'), Timestamp('2015-11-27 00:00:01.699000'), Timestamp('2015-11-27 00:00:02.699000')])
In [116]: times
Out[116]:
0 2015-11-27 00:00:00.540
1 2015-11-27 00:00:00.699
2 2015-11-27 00:00:01.000
3 2015-11-27 00:00:01.699
4 2015-11-27 00:00:02.699
Name: GMT, dtype: datetime64[ns]
的正确方法是什么?
答案 0 :(得分:1)
如果您需要将DialogFragment作为DialogFragment和其他活动中的普通片段,您可以使用setShowsDialog
指定您正在使用的内容,如下所示:
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setShowsDialog( false );
}
然后覆盖onCreateDialog
和onCreateView
,如下所示:
@NonNull
@Override
public Dialog onCreateDialog( Bundle savedInstanceState ) {
AlertDialog.Builder builder = new Builder( getActivity() );
// custom view inside the dialog
builder.setView( createView( getActivity().getLayoutInflater(), null, savedInstanceState ) );
return builder.create();
}
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
if ( getShowsDialog() ) {
return super.onCreateView( inflater, container, savedInstanceState );
} else {
// custom view creation
return createView( inflater, container, savedInstanceState );
}
}
在我的代码中,我有一个BaseClassFragment
,其中setsShowDialog为false,然后我有一个子类DialogBaseClassFragment
,它将setsShowDialog设置为true并在适当时使用它们。