Re: [问题] 程式写法请教

楼主: givemepass (λ)   2014-09-15 13:30:26
※ 引述《zxc190 (卡卡)》之铭言:
: 今天我在一个A class有个 function
: public static void ShowAlert(String msg,Activity activity){
: AlertDialog.Builder alert = new AlertDialog.Builder( activity );
: alert.setTitle("");
: alert.setMessage(msg);
: alert.setPositiveButton("确定", new DialogInterface.OnClickListener() {
: @Override
: public void onClick(DialogInterface arg0, int arg1) {
: }
: });
: alert.show();
: }
: 这样以后我只想秀alert 就可以A.ShowAlert("讯息",Activity);
: 现在问题来了 如果我想要在一些状况下按完确定后可以另外做一些事情
: 我要如何Override按完后的function
其实很简单,写一个callback就解决惹
首先宣告一个interface
public interface OnDialogListener{
public void OnDialogClick();
}
接着宣告一个变量
private OnDialogListener mOnDialogListener;
在宣告一个注册的方法
public void setOnDialogListener(OnDialogListener listener){
mOnDialogListener = listener;
}
然后就可以在这个类别使用它惹
假设你的类别是A类别
public class A{

public interface OnDialogListener{
public void OnDialogClick();
}
private OnDialogListener mOnDialogListener;
public void setOnDialogListener(OnDialogListener listener){
mOnDialogListener = listener;
}

public static void ShowAlert(String msg,Activity activity){
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
alert.setTitle("");
alert.setMessage(msg);
alert.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//当你按下确定以后 就会执行你想要执行的动作

//判断是否有注册 如果没注册就不用执行
if(mOnDialogListener != null){
mOnDialogListener.OnDialogClick();
}

}
});
alert.show();
}
}
好了 接着就是怎么使用A类别这个callback
假设现在有一个B类别
class B {
private A a;
public B(){
a = new A();
a.setOnDialogClickListener(new OnDialogClickListener(){
public void OnDialogClick(){
//就是在这边执行当你按下确定的时候想做的事情
}
});
}
}
这样就是一个简单的callback 但是只有对一个注册有效
后面还有很多变化 例如可以独立出一个类别专门让人在注册
当所有注册的物件 在某些事情发生变化的时候 就可以群体通知
当然android你也可以用广播来完成
(如果需要我在写一个范例for多个注册的)
这也是一种设计模式 叫做"观察者模式"
ps. 程式码没跑过 可能有那里漏掉 再告知 谢谢
作者: zxc190 (卡卡)   2014-09-15 14:19:00
感谢指导!实做出来了 感谢! 只是我function是宣告成static所以变量也要是static 没处理好会变成按确定都做那件事看来得把static拿掉每次都new比较安全了 再次谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com