`
superonion
  • 浏览: 126973 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Dialog向Activity传递数据

阅读更多
       我们知道,从一个Activity向另一个Activity传递数据,用Intent实现。而当一个浮在Activity之上的Dialog需要向该Activity传递数据时,应该怎么实现呢?接着上一篇文章:用Dialog创建带箭头的对话框
       现在PopupDialog中声明一个内部接口PriorityListener,接口中声明一个回调函数refreshPriorityUI,用于在Dialog的监听事件触发后刷新Activity的UI显示。然后在MainActivity中的Button点击事件中实现这个接口并将其作为PopupDialog的构造函数的参数传入,并实现refreshPriorityUI()方法。话不多说,直接上代码——
     PopupDialog代码:
public class PopupDialog extends Dialog {

	/**
	 * 自定义Dialog监听器
	 */
	public interface PriorityListener {
		/**
		 * 回调函数,用于在Dialog的监听事件触发后刷新Activity的UI显示
		 */
		public void refreshPriorityUI(String string);
	}
	
	private PriorityListener listener;
	/**
	 * 带监听器参数的构造函数
	 */
	public PopupDialog(Context context, int theme, PriorityListener listener) {
		super(context, theme);
		this.listener = listener;
	}

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
 		setContentView(R.layout.popup_dialog);
 		Button buttonUp = (Button) findViewById(R.id.btn_up);
 		buttonUp.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dismiss();
				listener.refreshPriorityUI("数据来自:上");				
			}
		});
	}

}


     MainActivity代码:
public class MainActivity extends Activity {
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button)findViewById(R.id.btn);
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				PopupDialog popupDialog = new PopupDialog(MainActivity.this, R.style.dialog, new PopupDialog.PriorityListener() {
					
					@Override
					public void refreshPriorityUI(String string) {
						Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
					}
				});
				popupDialog.setCanceledOnTouchOutside(true); // 点击Dialog之外的区域对话框消失
				Window window = popupDialog.getWindow();
				WindowManager.LayoutParams lp = window.getAttributes();
				lp.y = -64; // 设置竖直方向的偏移量
				lp.dimAmount = 0f; // 弹出对话框的时候背景不变暗
				popupDialog.show();
			}
		});
    }
}


      最后效果:



       点击“上”之后,MainActivity会调用refreshPriorityUI()方法:


  • 大小: 65.3 KB
  • 大小: 71.7 KB
1
0
分享到:
评论

相关推荐

    Android 初学案例

    内容比较多,分数也相对比较高...包括activity的切换兼intent传递Class class数据 7-8中dialog和自定义dialog的用法 存储数据 还有更加友好的提示(toast和通知)...intent action的应用 等。希望可以帮助各位初学者。

    Android典型技术模块开发详解

    3.4.1 Activity传递一般类型 3.4.2 Activity传递对象类型 3.4.2 Activity回传数据 3.5 Activity加载模式 3.6 本章小结 第4章 Intent (意图) 4.1 显式Intent 4.2 隐式Intent 4.2.1 IntentFilter 4.2.2 调用系统组件...

    android 面试2

    16、Intent传递数据时,下列的数据类型那些可以被传递(ABCD) A、Serializable B、charsequence C、Parcelable(邮包类型) D、Bundle 17、Android中使用Menu时可能需要重写的方法(AC) A、onCreateOptionsMenu() B、...

    Android生存指南之:开发中的注意事项

    发生事件时,系统会把Activity杀掉然后重启,并尝试恢复状态,Activity有机会通过onSaveInstanceState()保存一些基本数据到Bundle中,然后此Bundle会在Activity的onCreate()中传递过去。虽然这貌似正常,但是这会...

    TCP过滤软件Socket Sentinel v1.42 官方版.rar

    预置过滤包括:HTTP头信息,POST和GET数据,域名或即使*过滤*在任何连接传递的数据。 为了对付新的威胁,TCP过滤器包括一个强大的威胁检测引擎,用于检测和阻止黑洞,网络攻击,恶意URL和其他基于Web的威胁。 本软件...

    Android 开发技巧

    2.1.10、Dialog风格的Activity 23 2.1.11、横竖屏切换不销毁当前Activity 23 2.2、INTENT RECEIVER 25 2.3、SERVICE 26 2.3.1、什么是Service 26 2.3.2、如何使用Service 27 2.3.3、Service的生命周期 32 2.3.4、...

    Android开发资料合集-World版!

    2.1.10、Dialog风格的Activity 23 2.1.11、横竖屏切换不销毁当前Activity 23 2.2、INTENT RECEIVER 25 2.3、SERVICE 26 2.3.1、什么是Service 26 2.3.2、如何使用Service 27 2.3.3、Service的生命周期 32 2.3.4、...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    8.3.2 Dialog的Window创建过程 308 8.3.3 Toast的Window创建过程 311 第9章 四大组件的工作过程 316 9.1 四大组件的运行状态 316 9.2 Activity的工作过程 318 9.3 Service的工作过程 336 9.3.1 Service的启动...

    Android开发艺术探索

     8.3.2 Dialog的Window创建过程 / 308  8.3.3 Toast的Window创建过程 / 311  第9章 四大组件的工作过程 / 316  9.1 四大组件的运行状态 / 316  9.2 Activity的工作过程 / 318  9.3 Service的工作过程 / 336  ...

    安卓记事本

    // 传递ID this.deleteData(menuInfo.id); break; } return super.onContextItemSelected(item); } } /* *用来编辑日记 *主要包括一个方法,savaData用来保存数据; */ public class ...

    android开发艺术探索高清完整版PDF

    / 301 8.2.3 Window的更新过程 / 303 8.3 Window的创建过程 / 304 8.3.1 Activity的Window创建过程 / 304 8.3.2 Dialog的Window创建过程 / 308 8.3.3 Toast的Window创建过程 / 311 第9章 四大组件的工作过程 ...

Global site tag (gtag.js) - Google Analytics