在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