使⽤DialogFragment实现弹窗1-基本⽤法
定义
DiaogFragment是⼀个⽤来显⽰对话框窗体的Fragment,浮在他所在的Activity之上。它包含⼀个Dialog对象,根
据Fragment的状态来控制Dialog的显⽰,并且应使⽤他的API来管理Dialog,⽽不是直接调⽤Dialog。
例:在⼿机配置变化导致Activity需要重新创建时,例如旋转屏幕,基于DialogFragment的对话框将会由
FragmentManager⾃动重建,然⽽基于Dialog实现的对话框却没有这样的能⼒
使⽤⽅法
1、继承DiaogFragment
2、实现onCreateView或者onCreateDialog⽅法来指定布局
3、就像普通Fragment⼀样在宿主调⽤显⽰
⽣命周期
DialogFragment做了很多事情来尽量通过Fragment的⽣命周期来控制它⾃⾝,⽽不是采⽤Dialog的⽣命周期。注意,通常对话框是⾃治实
体--他们有⾃⼰的window,接受输⼊事件,甚⾄⾃⼰决定什么时候消失(⼀般是后退事件)。
DialogFragment需要尽量让Fragment和Dialog保持⼀致的状态,因此他会监测Dialog的dismiss事件,当事件触发的时候,他会移除掉
它⾃⼰的状态。这意味着,你需要使⽤show(FragmentManager,String)和show(FragmentTransaction,String)来给你的UI添加
DialogFragment,因为这两个⽅法会在DialogFrament移除⾃⼰和Dialog的dismiss事件之间建⽴关联。
⽰例1-⼀般Dialog
1、DialogFragment定义
2、调⽤
publicstaticclassMyDialogFragmentextendsDialogFragment{
intmNum;
/**
*CreateanewinstanceofMyDialogFragment,providing"num"
*asanargument.
*/
staticMyDialogFragmentnewInstance(intnum){
MyDialogFragmentf=newMyDialogFragment();
//Supplynuminputasanargument.
Bundleargs=newBundle();
("num",num);
uments(args);
returnf;
}
@Override
publicvoidonCreate(BundlesavedInstanceState){
te(savedInstanceState);
mNum=getArguments().getInt("num");
//Pickastylebadonthenum.
intstyle=_NORMAL,theme=0;
switch((mNum-1)%6){
ca1:style=_NO_TITLE;break;
ca2:style=_NO_FRAME;break;
ca3:style=_NO_INPUT;break;
ca4:style=_NORMAL;break;
ca5:style=_NORMAL;break;
ca6:style=_NO_TITLE;break;
ca7:style=_NO_FRAME;break;
ca8:style=_NORMAL;break;
}
switch((mNum-1)%6){
ca4:theme=_Holo;break;
ca5:theme=_Holo_Light_Dialog;break;
ca6:theme=_Holo_Light;break;
ca7:theme=_Holo_Light_Panel;break;
ca8:theme=_Holo_Light;break;
}
tStyle(style,theme);
}
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
Viewv=e(nt_dialog,container,fal);
Viewtv=ewById();
((TextView)tv).tText("Dialog#"+mNum+":usingstyle"
+getNameForNum(mNum));
//Watchforbuttonclicks.
Buttonbutton=(Button)ewById();
lickListener(newOnClickListener(){
publicvoidonClick(Viewv){
//Whenbuttonisclicked,calluptoowningactivity.
((FragmentDialog)getActivity()).showDialog();
}
});
returnv;
}
}
⽰例2-AlertDialog
可以通过实现onCreateDialog(Bundle),直接来实现⾃定义Dialog
voidshowDialog(){
mStackLevel++;
//()willtakecareofaddingthefragment
//wanttoremoveanycurrentlyshowing
//dialog,somakeourowntransactionandtakecareofthathere.
FragmentTransactionft=getFragmentManager().beginTransaction();
Fragmentprev=getFragmentManager().findFragmentByTag("dialog");
if(prev!=null){
(prev);
}
ackStack(null);
//Createandshowthedialog.
DialogFragmentnewFragment=tance(mStackLevel);
(ft,"dialog");
}
publicstaticclassMyAlertDialogFragmentextendsDialogFragment{
publicstaticMyAlertDialogFragmentnewInstance(inttitle){
MyAlertDialogFragmentfrag=newMyAlertDialogFragment();
Bundleargs=newBundle();
("title",title);
uments(args);
returnfrag;
}
@Override
publicDialogonCreateDialog(BundlesavedInstanceState){
inttitle=getArguments().getInt("title");
r(getActivity())
.tIcon(_dialog_icon)
.tTitle(title)
.tPositiveButton(_dialog_ok,
kListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.tNegativeButton(_dialog_cancel,
kListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
参考⽂档:
voidshowDialog(){
DialogFragmentnewFragment=tance(
_dialog_two_buttons_title);
(getFragmentManager(),"dialog");
}
publicvoiddoPositiveClick(){
//Dostuffhere.
Log.i("FragmentAlertDialog","Positiveclick!");
}
publicvoiddoNegativeClick(){
//Dostuffhere.
Log.i("FragmentAlertDialog","Negativeclick!");
}
本文发布于:2023-03-12 20:02:38,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678622559229363.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:手机弹窗.doc
本文 PDF 下载地址:手机弹窗.pdf
留言与评论(共有 0 条评论) |