接口回调是android中非常重要的,我也不是特别熟悉,在这小小分析一下
下面是注意的几点分析:以一个dialog作为例子
public class DialogUtil {
private Context mContext;
static DialogUtil mDialogUtil;
// 定义的接口
private DialogClickListener mListener;
public static DialogUtil getIntance(Context mContext){
if(mDialogUtil == null){
mDialogUtil = new DialogUtil(mContext);
}
return mDialogUtil;
}
public DialogUtil(Context mContext){
this.mContext = mContext;
}
public Dialog titleMsgBtnStyle(String title, String message, String confirmText,
String cancelText) {
final Dialog lDialog = new Dialog(mContext, android.R.style.Theme_Translucent_NoTitleBar);
WindowManager.LayoutParams lp = lDialog.getWindow().getAttributes();
lp.dimAmount = 0.4f;
lDialog.getWindow().setAttributes(lp);
lDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
lDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
lDialog.setContentView(R.layout.dialog_msg_title);
TextView titleview = (TextView) lDialog.findViewById(R.id.tv_title);
titleview.setText(title);
TextView msg = (TextView) lDialog.findViewById(R.id.tv_message);
msg.setText(message);
Button confirmBtn = (Button) lDialog.findViewById(R.id.btn_confirm);
Button cancelBtn = (Button) lDialog.findViewById(R.id.btn_cancel);
confirmBtn.setText(confirmText);
cancelBtn.setText(cancelText);
confirmBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 接口内的方法实现位置
if (mListener != null) {
mListener.onConfirmClick(lDialog);
}
}
});
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 接口内的方法实现位置
if (mListener != null) {
mListener.onCancelClick(lDialog);
}
}
});
try {
lDialog.show();
} catch (WindowManager.BadTokenException e) {
// Log.d(TAG, e.toString());
}
return lDialog;
}
// 自定义一个接口,里面有抽象方法,方法内的参数是后面需要的对象
public interface DialogClickListener{
public void onConfirmClick(Dialog mDialog);
public void onCancelClick(Dialog mDialog);
}
// 写一个方法,用来调用接口
public void setDialogListener(DialogClickListener listener){
this.mListener = listener;
}
}
// activity 代码
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
private LinearLayout mLayout;
private DialogUtil mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout = (LinearLayout) findViewById(R.id.main_layout);
mDialog = DialogUtil.getIntance(this);
mLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDialog.titleMsgBtnStyle("","","","");
}
});
mDialog.setDialogListener(new DialogUtil.DialogClickListener() {
@Override
public void onConfirmClick(Dialog mDialog) {
mDialog.dismiss();
}
@Override
public void onCancelClick(Dialog mDialog) {
mDialog.dismiss();
}
});
}
}
第二个小例子:
public class A extends Activity implements C{ @Override public void in(int a) { // TODO Auto-generated method stub System.out.println(a); } PopupWindow p = new PopupWindow(); p.setC(this); } public class B extends PopupWindow{ C c; public B() { // TODO Auto-generated constructor stub //怎么实例化C啊 //c=new ?? c.in(100); } public void setC(C c){ this.c = c; } public interface C{ public void in(int a); } }