使用DialogFragment托管dialog
来源:互联网 发布:mac自动播放照片 编辑:程序博客网 时间:2024/05/17 01:53
普通的 AlertDialog 在横竖屏切换时会被销毁,如果dialog上面有数据,也将丢失。解决方案是使用DialogFragment(http://developer.android.com/reference/android/app/DialogFragment.html) 。
使用 dialogFragment 通常需要复写两个方法:
onCreateView(LayoutInflater, ViewGroup, Bundle)onCreateDialog(Bundle)
如果你想自定义dialog样式,只需要复写 onCreateView ,注入一个自定义的view即可,然后通过调用DialogFragment#show() 方法即可。
这里我们不需要自定义,只需要托管 AlertDialog 即可,所以我们仅仅需要复写 onCreateDialog 方法。在这个方法内部我们需要通过 AlertDialog.Builder 构建一个dialog并返回,dialog的参数可以通过 setArguments 注入。具体代码如下:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package
com.taobao.dialogfragmentdemo;
import
android.app.Dialog;
import
android.content.DialogInterface;
import
android.os.Bundle;
import
android.support.annotation.NonNull;
import
android.support.v4.app.DialogFragment;
import
android.support.v7.app.AlertDialog;
public
class
AlertDialogFragment
extends
DialogFragment
{
private
static
final
String PARAM_TITLE =
"title"
;
private
static
final
String PARAM_CONTENT =
"content"
;
private
static
DialogCallback mCallback;
public
AlertDialogFragment()
{
}
public
static
AlertDialogFragment newInstance(String title,String content,DialogCallback callback)
{
AlertDialogFragment instance =
new
AlertDialogFragment();
Bundle bundle =
new
Bundle();
bundle.putString(PARAM_TITLE,title);
bundle.putString(PARAM_CONTENT,content);
instance.setArguments(bundle);
mCallback = callback;
return
instance;
}
@NonNull
@Override
public
Dialog onCreateDialog(Bundle savedInstanceState)
{
Bundle params = getArguments();
AlertDialog.Builder builder =
new
AlertDialog.Builder(getActivity());
builder.setTitle(params.getString(PARAM_TITLE));
//没有做非空判断,按需添加
builder.setMessage(params.getString(PARAM_CONTENT));
builder.setPositiveButton(
"确定"
,
new
DialogInterface.OnClickListener()
{
@Override
public
void
onClick(DialogInterface dialog,
int
which)
{
if
(mCallback !=
null
)
mCallback.onPostiveClick();
}
});
builder.setNegativeButton(
"取消"
,
new
DialogInterface.OnClickListener()
{
@Override
public
void
onClick(DialogInterface dialog,
int
which)
{
if
(mCallback !=
null
)
mCallback.onNegativeClick();
}
});
return
builder.show();
}
public
interface
DialogCallback
{
public
void
onPostiveClick();
public
void
onNegativeClick();
}
}
想使用也很简单:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
AlertDialogFragment dialog = AlertDialogFragment.newInstance(
"标题"
,
"这是fragment托管的alertdialog"
,
new
AlertDialogFragment.DialogCallback()
{
@Override
public
void
onPostiveClick()
{
Toast.makeText(MainActivity.
this
,
"确定"
,Toast.LENGTH_SHORT).show();
}
@Override
public
void
onNegativeClick()
{
Toast.makeText(MainActivity.
this
,
"取消"
,Toast.LENGTH_SHORT).show();
}
});
dialog.show(getSupportFragmentManager(),
"dialog"
);
还可以通过 DialogFragment#show 的第二个参数tag来找到对应的dialogFragment:
[Java] 纯文本查看 复制代码
1
2
3
4
5
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment prevDialog = getSupportFragmentManager().findFragmentByTag(
"dialog"
);
if
(prevDialog !=
null
)
{
transaction.remove(prevDialog);
}
0 0
- 使用DialogFragment托管dialog
- 【安卓笔记】使用DialogFragment托管dialog
- Dialog与DialogFragment使用
- 使用DialogFragment 代替 Dialog
- android 使用DialogFragment 自定义Dialog
- DialogFragment的使用(自定义Dialog )
- dialogFragment---dialog
- 使用DialogFragment代替Dialog定制各种样式
- Android 使用DialogFragment 实现一个可以多选的Dialog
- 自定义Dialog&DialogFragment
- Dialog和DialogFragment
- 自定义Dialog和DialogFragment
- 自定义dialog 通过DialogFragment
- Dialog VS DialogFragment
- Dialog, DialogFragment, PopupWindow比较
- 使用DialogFragment
- dialogfragment使用
- DialogFragment 使用
- 条形码barcode4j的使用
- leetCode 之 Maximum Depth of Binary Tree
- asp.net 导入excel表格
- 项目调试Assertion failed
- 上海英语播音学校比较好
- 使用DialogFragment托管dialog
- GRE词汇分类之与装修词汇
- Memory Debuggers
- Android Studio 类库中配置Jpush 报错 java.lang.UnsatisfiedLinkError解决方案
- Ubuntu 14.04一步一步安装Openstack Kilo版本-2
- 隐马尔科夫学习六(三)
- Leetcode[217]-Contains Duplicate
- 使用gdb调试C++程序时,感觉不按流程执行,跳来跳去的解决办法
- 【数据结构】栈的应用——中缀表达式求值(c++)