Android 继承DialogFragment弹出dialog对话框一

相信现在Android软件开发员,都经常用到这种方式弹出对话框的。Android继承DialogFragment弹出dialog对话框,这样弹出有很多可以灵活处理地方,想什么启动,什么时候数据接口返回都可以,有自已layout布局,生命周期。下面看看我写demo。

本文代码下载:请点击这里

转载请注明出处: http://blog.csdn.net/qq_16064871

一、MainActivity

package com.example.fragmentdialogdemo;

import com.example.fragmentdialogdemo.TestDialog.onTestListener;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements OnClickListener,
		onTestListener {

	private String mstrName = "";
	private String mstrHigh = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initUI();
	}

	private void initUI() {
		Button buttonTest = (Button) findViewById(R.id.buttonTest);
		buttonTest.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	// 接口回调的函数
	@Override
	public void onTestListener(int uniqueIdentifier, String strName,
			String strHigh) {
		if (uniqueIdentifier == 1) {
			Toast.makeText(getApplicationContext(),
					"姓名:" + strName + ",身高:" + strHigh, Toast.LENGTH_LONG)
					.show();
			TextView textView1 = (TextView) findViewById(R.id.textView1);
			textView1.setText("姓名:" + strName + ",身高:" + strHigh);
		}

		mstrName = strName;
		mstrHigh = strHigh;
	}

	@Override
	public void onClick(View arg0) {
		switch (arg0.getId()) {
		case R.id.buttonTest:
			// 实例化TestDialog,可以传参数进去,例如标题,或者其他参数,还有一个唯一码.
			TestDialog dialog = new TestDialog().newInstance("请输入", 1,
					mstrName, mstrHigh);
			dialog.show(this.getSupportFragmentManager(), "TestDialog");
			break;
		default:
			break;
		}

	}

}

里面都有一些注释了,有些时候也要主要看我导入包。

二、TestDialog

package com.example.fragmentdialogdemo;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TestDialog extends DialogFragment {

	// mUniqueFlag作用是唯一码,可以使返回时做判断
	private int mUniqueFlag = -1;
	private onTestListener mOnListener;
	private EditText meditTextName, meditTextHigh;
	protected Button mButtonPositive;

	/**
	 * 新建实例
	 *
	 * @param title
	 * @param unique
	 * @param strName
	 * @param strHigh
	 * @return
	 */
	public static TestDialog newInstance(String title, int unique,
			String strName, String strHigh) {
		TestDialog tDialog = new TestDialog();
		Bundle args = new Bundle();
		args.putString("SelectTemplateTitle", title);
		args.putInt("MultipleTemplate", unique);
		args.putString("TemplateName", strName);
		args.putString("TemplateHigh", strHigh);
		tDialog.setArguments(args);
		return tDialog;

	}

	public interface onTestListener {

		/**
		 *
		 * @param uniqueIdentifier
		 *            唯一标识
		 * @param strName
		 * @param strHigh
		 */
		public abstract void onTestListener(int uniqueIdentifier,
				String strName, String strHigh);
	}

	// 旋转时候保存
	@Override
	public void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putString("InputName", meditTextName.getText().toString());
		outState.putString("InputHigh", meditTextHigh.getText().toString());
	}

	@Override
	public Dialog onCreateDialog(Bundle saveInstanceState) {
		String title = getArguments().getString("SelectTemplateTitle");
		mUniqueFlag = getArguments().getInt("MultipleTemplate");

		AlertDialog.Builder Builder = new AlertDialog.Builder(getActivity())
				.setTitle(title)
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 触发数据回调
						if (mOnListener != null)
							mOnListener.onTestListener(mUniqueFlag,
									meditTextName.getText().toString(),
									meditTextHigh.getText().toString());
					}
				}).setNegativeButton("取消", null);

		// 添加xml布局
		View view = getActivity().getLayoutInflater().inflate(
				R.layout.test_dialog, null);
		setupUI(view);

		// 旋转后,恢复数据
		if (saveInstanceState != null) {
			String strName = saveInstanceState.getString("InputName");
			if (strName != null)
				meditTextName.setText(strName);

			String strHigh = saveInstanceState.getString("InputHigh");
			if (strHigh != null)
				meditTextHigh.setText(strHigh);
		}
		Builder.setView(view);

		//创建对话框
		AlertDialog dialog = (AlertDialog) Builder.create();
		return dialog;
	}

	private void setupUI(View view) {
		if (view == null)
			return;
		String strName = getArguments().getString("TemplateName");
		String strHigh = getArguments().getString("TemplateHigh");
		meditTextName = (EditText) view.findViewById(R.id.editTextName);
		meditTextHigh = (EditText) view.findViewById(R.id.editTextHigh);

		meditTextName.setText(strName);
		meditTextHigh.setText(strHigh);
	}

	// onAttach是关联activity的,用接口回调
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		try {
			mOnListener = (onTestListener) activity;
		} catch (ClassCastException e) {
			dismiss();
		}
	}

}

继承DialogFragment,还有很多方法以及生命周期。自已写的可以多去查看方法。这上面写主要是数据传入,以及数据接口回调到activity。

三、activity的xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:gravity="center"
        android:textSize="18sp"
        android:text="点击button" />

    <Button
        android:id="@+id/buttonTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

四、dialog对话框xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:gravity="center"
        android:textSize="18sp"
        android:text="点击button" />

    <Button
        android:id="@+id/buttonTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

五、需要注意事项,关于这样使用版本问题

主要是sdk版本的问题,因为Fragment是在3.0提出的,为了兼容低版本,需要引入一个android-support-v4.jar,但是在实例化 FragmentManager时,不能用getFragmentManager()这个方法。如果找不到这个getFragmentManager()这个方法,就如下解决。

解决办法:

1、引入一个android-support-v4.jar

2、需要实例化的activity必须 extends FragmentActivity 

3、用this.getSupportFragmentManager();来替代getFragmentManager()

也可以主要有上面我写的例子,也有这方面的原因。注意导入jar包。

六、效果图如下

到这里就结束了,欢迎交流学习。

本文代码下载:请点击这里

转载请注明出处: http://blog.csdn.net/qq_16064871

时间: 2024-10-05 04:58:19

Android 继承DialogFragment弹出dialog对话框一的相关文章

Android 继承DialogFragment弹出dialog对话框二

之前写过一篇关于Android 继承DialogFragment弹出dialog对话框一,这次是在上次的基础上修改了一些东西,就是怎样在DialogFragment中获取getDialog()是获取当前对话框句柄.就可以进行布局可变的灵活操作.就像getactivity();一样使用.下面看代码. 本文demo下载地址:点击 MainActivity package com.example.fragmentdialogdemo; import com.example.fragmentdialog

如何使用Service的Context弹出Dialog对话框,即全局性对话框

在dialog.show()语句前加入: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 然后在AndroidManifest.xml中加入权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 下面进行简单的解释: 如果只在Service中写入常在Activity中使用的创建D

android service 如何弹出dialog

在service中弹出toast,需要使用handler, 1 handler.post(new Runnable() { 2 @Override 3 public void run() { 4 Toast.makeText(this, "重启服务", 1).show(); 5 } 6 }); 在service中弹出dialog,写着跟activity同样代码会报错. 因为这个dialog显示时是需要依赖一个activity,如何需要在service中显示需要把dialog设置成一个系

android 如何让弹出的对话框不消失

Builder builder = new AlertDialog.Builder(this);  builder.setTitle(android.R.string.dialog_alert_title)    .setIcon(android.R.drawable.ic_dialog_info)    .setPositiveButton(android.R.string.ok,      new OnClickListener() {       public void onClick(D

关于android在Service中弹出Dialog对话框

在创建好AlertDialog类型对象后,要 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 同时还要设置权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission> 这样后就可dialog.show()了,要不然容易报错

Android编程:底部弹出的对话框

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:Android Studio 2.2 Preview 3 说明: 两种方法实现底部弹出的对话框: Dialog DialogFragment 推荐用DialogFragment 效果图: 布局文件dialog_select_call.xml: <?xml version="1.0" encoding="utf-8"?> &l

android开发(31) 动画演示 - 从页面底部向上弹出dialog,消失时逐渐向下

我想实现一个效果,从底部向上逐渐弹出.如下图所示: 1.点击 显示 按钮时,一个dialog对话框从底部慢慢向上弹出. 2.关闭dialog时, dialog缓慢的移动向底部消失.很平滑的效果.     实现方式: 在activity中写代码如下 public class MainActivity extends Activity { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { su

Android 底部弹出Dialog(横向满屏)

项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay_share.xml) 1 <?xml version="1.0" encoding="utf-8"?> 2 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

Android 点击一个按钮,弹出一个对话框

界面非常的简单,就是一个Button,点击这个Button呢,会弹出一个对话框 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout