Android中的接口回调方式

在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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值