在android中非常常见的一种代码用法就是接口回调。
接口回调用在什么地方呢,简单的举个例子我们在Activity中要弹出一个可编辑的对话框,然后获得编辑内容并将编辑内容回传给Activity。这一系列的操作就可以用到接口回调。
简单点说也就是A调用B,B执行完毕将数据回传给A的操作。
接口回调顾名思义一定要有接口步骤如下
1.在B中定义接口,并将接口设置为成员变量,给接口设置set方法供A使用。
2.B中在需要回传数据给A的方法中调用接口中的方法。
3.在A中设置调用B的set方法设置接口监听,这时一旦B中的接口被调用A就会执行。
看到这下面结合代码再看看
1.自定义一个Dialog,这个Dialog就相当于上边的B
MyDialog
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* @author quzy
*
* @Description
*
* @version 创建时间:2016-3-9 下午6:29:48
*/
public class MyDialog extends Dialog {
private String title;
private EditText editText;
private OnDialogClickListener mDialogClickListener;
/**
* 使用此种构造函数要有setOnDialogClickListener方法
*/
public MyDialog(Context context, String title) {
super(context);
this.title = title;
}
/**
* 构造函数传入监听
* @param context
* @param title
* @param mDialogClickListener
*/
public MyDialog(Context context, String title,OnDialogClickListener mDialogClickListener) {
super(context);
this.title = title;
this.mDialogClickListener = mDialogClickListener;
}
/**
* 回调监听
* @author Administrator
*
*/
public interface OnDialogClickListener {
public void back(String back);
};
/**
* 设置监听供调用者添加监听(也可不写此方法,改由构造函数传入)
* @param mDialogClickListener
*/
public void setOnDialogClickListener(
OnDialogClickListener mDialogClickListener) {
this.mDialogClickListener = mDialogClickListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
// 设置标题
setTitle(title);
editText = (EditText) findViewById(R.id.edit);
Button clickBtn = (Button) findViewById(R.id.clickbtn);
clickBtn.setOnClickListener(clickListener);
}
private View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialogClickListener.back(String.valueOf(editText.getText()));
MyDialog.this.dismiss();
}
};
}
2.MainActivity相当于A调用者
import com.example.myinterfacetext.MyDialog.OnDialogClickListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
private TextView resultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultText = (TextView) findViewById(R.id.result);
Button showDialogBtn = (Button) findViewById(R.id.showdialog);
showDialogBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
MyDialog dialog = new MyDialog(MainActivity.this, "enter info");
//给dialog设置接口回调监听
dialog.setOnDialogClickListener(new OnDialogClickListener() {
@Override
public void back(String back) {
resultText.setText("Enter name is "+back);
}
});
//调用构造函数传入接口回调监听
/*MyDialog dialog = new MyDialog(MainActivity.this, "enter info", new OnDialogClickListener() {
@Override
public void back(String back) {
resultText.setText("Enter name is "+back);
}
});*/
dialog.show();
}
}
效果图:
布局文件很简单没有贴出来可以下载源码看
源码地址:http://download.csdn.net/detail/linder_qzy/9456921