Android中DialogFragment的使用

一.概述:

DialogFragment是Android3.0(API 11)才出现的,它不像以前版本中生成AlertDialog一样,通过AlertDialog.Builder生成Dialog,而是在fragment中弹出Dialog的窗口,即DialogFragment是一个Fragment,而且这个fragment本身就含有一个Dialog对象。

二.创建DialogFragment:

DialogFragment的创建有两种方式:
1.用onCreateView()加载Fragment布局而创建;
2.用onCreateDialog()创建;
第二种创建方式可以自定义Dialog,加入想要的内容,如取消/确定/图标/标题。。。类似于AlertDialog;
当创建好DialogFragment之后,在activity中显示,用show(FragmentTransaction transaction, String tag)或者show(FragmentManager manager, String tag)显示即可,tag是定义的一个标签,由自己设置;关于DialogFragment的一些方法和xml属性,可查看API文档进行了解,使用难度并不大;
三.实例:

第一种:用onCreateView()创建:

xml布局中只有一个按钮点击弹出DialogFragment,在MainActivity.java中:

public class MainActivity extends Activity implements OnClickListener {

	private Button button;
	private DialogFragmentA dialog;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button);
		button.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {

		DialogFragmentA fragment;
		fragment = (DialogFragmentA) getFragmentManager().findFragmentByTag(
				"dialog");
		if (fragment == null) {
			Bundle bundle = new Bundle();
			bundle.putString("title", "AlertDialog");
			fragment = DialogFragmentA.newInstance(bundle);
			Log.i("jia", "fragment=null");
		}
		FragmentTransaction ft = getFragmentManager().beginTransaction();
		fragment.show(ft, "dialog");</span>
                //fragment.show(getFragmentManager(), "dialog");
	}
}



在DialogFragmentA中:

public class DialogFragmentA extends DialogFragment {
	private TextView textView;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.dialoga, container, false);
		textView = (TextView) view.findViewById(R.id.textView1);
		Bundle bundle = getArguments();
		String title = bundle.getString("title");
		textView.setText(title);
		return view;
	}

	public static DialogFragmentA newInstance(Bundle bundle) {
		DialogFragmentA fragment = new DialogFragmentA();
		fragment.setArguments(bundle);
		// DialogFragment的样式:无标题
		fragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
		return fragment;
	}
}

 
这种方式创建的DialogFragment会根据Fragment的布局生成样式。 

第二种方式:用onCreateDialog()创建:

在DialogFragmentA中:

public class DialogFragmentA extends DialogFragment {

	public static DialogFragmentA newInstance(Bundle bundle) {
		DialogFragmentA fragment = new DialogFragmentA();
		fragment.setArguments(bundle);
		return fragment;
	}

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		return new AlertDialog.Builder(getActivity()).setTitle("title")
				.setMessage("您确定要退出吗?").setIcon(R.drawable.ic_launcher)
				.setPositiveButton("yes", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						getActivity().finish();
					}
				}).setNegativeButton("no", null).create();
	}
}


和AlertDialog的创建过程是一样的。
四.运行效果:(由于第一种方式自定义布局时只定义了一个TextView,所以这里只给出第二种的运行效果)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值