package com.itheima.momo.dialog;

import com.itheima.momo.R;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View; public abstract class BaseDialog extends AlertDialog implements android.view.View.OnClickListener{ protected BaseDialog(Context context) {
//通过构造指定主题,主题中就已经设置了弧形边角的背景
super(context, R.style.BaseDialog);
// TODO Auto-generated constructor stub
} @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
initView();
initListener();
initData();
} public abstract void initView();
public abstract void initListener();
public abstract void initData();
public abstract void processClick(View v); /*
* 这个是继承得来的方法,用这个方法后,一个activity里面所有组件的按钮都只要去
* 实现抽象方法就行,组件上就会自动的挂上侦听,而不用每个组件都写一个点击事件
* 了,这样可以提高代码的复用性,还有代码的间接性。
*/
@Override
public void onClick(View v) {
processClick(v); }
}
package com.itheima.momo.dialog;

import com.itheima.momo.R;

import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class ConfirmDialog extends BaseDialog { private String title;
private String message;
private TextView tv_dialog_title;
private TextView tv_dialog_message;
private Button bt_dialog_cancel;
private Button bt_dialog_confirm;
private OnConfirmListener onConfirmListener; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} protected ConfirmDialog(Context context) {
super(context);
// TODO Auto-generated constructor stub
} //在类中写一个静态方法,直接获取本类的对象。
public static void showDialog(Context context, String title, String message, OnConfirmListener confirmListener){
ConfirmDialog dialog = new ConfirmDialog(context);
dialog.setTitle(title);
dialog.setMessage(message);
dialog.setConfirmListener(confirmListener);
dialog.show();
} @Override
public void initView() {
//设置对话框显示的布局文件
setContentView(R.layout.dialog_confirm); tv_dialog_title = (TextView) findViewById(R.id.tv_dialog_title);
tv_dialog_message = (TextView) findViewById(R.id.tv_dialog_message); bt_dialog_cancel = (Button) findViewById(R.id.bt_dialog_cancel);
bt_dialog_confirm = (Button) findViewById(R.id.bt_dialog_confirm); } @Override
public void initListener() {
bt_dialog_cancel.setOnClickListener(this);
bt_dialog_confirm.setOnClickListener(this); } @Override
public void initData() {
tv_dialog_title.setText(title);
tv_dialog_message.setText(message); } @Override
public void processClick(View v) {
switch (v.getId()) {
//如果取消按钮按下时,侦听存在,那么调用侦听的onCancel
case R.id.bt_dialog_cancel:
if(onConfirmListener != null){
onConfirmListener.onCancel();

}
break;
case R.id.bt_dialog_confirm:
if(onConfirmListener != null){
onConfirmListener.onConfirm();

}
break;
}
//对话框消失
dismiss();
} public void setConfirmListener(OnConfirmListener confirmListener) {
this.onConfirmListener = confirmListener;
}
//自己定义一个接口,为了保证其能够被多次复用。
public interface OnConfirmListener{
void onCancel();
void
onConfirm();
}
}

---------------------------------------------------------------------------------------------

private void showDeleteDialog() {
ConfirmDialog.showDialog(getActivity(), "提示", "真的要删除会话吗?", new OnConfirmListener() {

@Override
public void onConfirm() {
deleteSms();
}

@Override
public void onCancel() {
}
});

}

android 学习随笔二十九(自定义监听 )的更多相关文章

  1. android 学习随笔二十(多媒体编程 )

    1.图片处理 加载大图片 图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 * 单色图:每个像素占用1/8个字节* 16色图:每个像素占用1/2个字节* 256色图:每个像素占用1个 ...

  2. android 学习随笔二十八(应用小知识点小结 )

    去掉标题栏的方法 第一种:也一般入门的时候经常使用的一种方法requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏注意这句一定要写在setConte ...

  3. android 学习随笔二十六(动画:属性动画)

    属性动画,属性动画是真正改变对象的某个属性的值 * 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变1.位移:* 第一个参数target指定要显示动画的组件* 第二个参数proper ...

  4. android 学习随笔二十五(动画:补间动画)

    补间动画(TweenAnimation) * 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画(为了让对象从初始状态向结束状态改变的过程更加自然而自动生成的动画效果)* 位移.旋转.缩放.透 ...

  5. android 学习随笔二十四(动画:帧动画)

    帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...

  6. android 学习随笔二十二(小结)

    ADB进程 * adb指令 * adb install xxx.apk * adb uninstall 包名 * adb devices * adb start-server * adb kill-s ...

  7. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  8. android 项目学习随笔二十(屏幕适配)

    1.图片适配 放入相同名称的资源文件,机器根据不同分辨率找相近的资源 240*320 ldpi 320*480 mdpi 480*800 hdpi 720*1280 xhdpi 2.布局适配 在不同的 ...

  9. Android学习笔记(十九)——内容提供器

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整 ...

随机推荐

  1. 在CentOS6.5上安装Tomcat7

    Tomcat大本营地址:http://tomcat.apache.org/ 本文使用到的Tomcat7下载地址:http://apache.opencas.org/tomcat/tomcat-7/v7 ...

  2. LeetCode Closest Binary Search Tree Value

    原题链接在这里:https://leetcode.com/problems/closest-binary-search-tree-value/ Given a non-empty binary sea ...

  3. 花式玩转社交App,百变应用场景

    活动概况 时间:2016年03月20日13:30-16:30 地点:深圳腾讯大厦2楼多功能厅(南山区科技园科技中一路) 主办:APICloud.腾讯云分析和信鸽.云之讯 报名链接:http://act ...

  4. WPF 程序检测 windows 关机

    1.使用SessionEnding事件 参考MSDN. 2.在需要处理 关机事件中可以注册SessionEnding事件 App.Current.SessionEnding += Current_Se ...

  5. javascript 字符串相关知识汇总

    ① charAt(): 选中字符串内第几个元素 <script> var str="1234567389"; alert( str.charAt(1) ); // 2 ...

  6. nginx地址重写

    1. 域名重定向 server_name wx.he.com weixin.ha.com; if ($http_host !~* "wx\.he\.com"){ rewrite ^ ...

  7. my.cnf详解

    [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir ...

  8. tooltip

    /* 背景色 ; 字体颜色 ; 云,显示在上面 */ .tooltip-inner{ background-color: #FF0000; ForeColor:#0f0; IsBalloon:true ...

  9. node.js中使用node-schedule实现定时任务

    摘要:有时我们需要在每天的固定时间执行某个脚本,或者在某个固定时间执行某个任务.NodeJS中的 node-schedule 可以很好的实现定时任务. 1.安装 npm install node-sc ...

  10. C++向量(Vector)

    向量Vector: 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template L ...