Android 通过接口传值
接口传值简单了说,就是在需要传值的那方定义接口,在接收数据的那方实现接口,数据就在需要实现的那个方法里,千万记住传值方的Listener一定是接收数据方的Listener。
第一步:定义接口类:
public interface Listener {
void send(String s);
}
第二步:传递类发送数据:
public class Data {
public Listener mListener;//接口
public Data(Listener mListener) {
this.mListener = mListener;
}
public void sends(){
mListener.send("越努力越成功,越聚贵人!");//开始发送数据
}
}
第三步:接受类接收数据:
public class MainActivity extends Activity implements Listener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Data data = new Data(this);//实例化data类
data.sends();//启动发送
}
@Override
public void send(String s) {
Log.e("tag: ",s);
}
}
案例(一)
public interface CallBack {
void doSomeThing(String string);
}
public class CallBackUtils {
private static CallBack mCallBack;
//方式1
public static void setCallBack(CallBack callBack) {
mCallBack = callBack;
}
//方式2 直接把CallBack 当参数传入,
// 在需要使用的时候直接传入,然后调用接口方法就可以了。
// 避免了,忘记在调用的类中setCallBack(set值)
public static void doCallBackMethod(CallBack callBack){
String info = "这里CallBackUtils即将发送的数据。";
callBack.doSomeThing(info);
}
}
public class SimpleCallBackTest extends Activity implements CallBack {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//CallBackUtils.setCallBack(this);
//调用CallBackUtils的doCallBackMethod()方法。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
/**
* 方式一 解释
* 调用doCallBackMethod方法,目的是将SimpleCallBackTest注册到接口那里,
* 使接口知道,需要调用的是哪个类中的,实现该接口的方法。
* 调用CallBackUtils.doCallBackMethod()即调用了CallBack.doSomeThing(info)方法;
* 通过接口就可以把数据传输到这个类里的doSomeThing()方法里。
*/
//CallBackUtils.doCallBackMethod();
/**
* 方式二 解释 (推荐使用)
* SimpleCallBackTest.this 实现了CallBack接口
* 用多态理解,就是SimpleCallBackTest 是CallBack的具体实现子类。
* 所以这里传入SimpleCallBackTest.this
* 详见CallBackUtils类
*/
CallBackUtils.doCallBackMethod(SimpleCallBackTest.this);
}
}, 1000);
}
@Override
public void doSomeThing(String string) {
Log.e("========", "拿到CallBackUtils的传递过来的数据=====" + string);
}
}
案例(二)
public class DownloadImageUtil {
public static void StartDownLoad(final ImageStateInterface imageStateInterface,
final Context context) {
//该imageStateInterface使其得知,是从哪里注册过来的,然后根据其来源调用其实现的接口方法。
//如下,此时调用的就是MainActivity.this中实现的onImageStart方法。
imageStateInterface.onImageStart();
new Thread(new Runnable() {
@Override
public void run() {
try {
new Thread().sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeResource(
context.getResources(), R.mipmap.ic_launcher);
imageStateInterface.onImageSuccess(bitmap);
}
}).start();
imageStateInterface.OnEnd();
}
}
public interface ImageStateInterface {
void onImageStart();
void onImageSuccess(Bitmap bitmap);
void onImageFailed();
void OnEnd();
}
public class MainActivity extends Activity implements ImageStateInterface {
private Button button;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 实例化控件
*/
//实现方式一 (推荐)
onLincoln();
//实现方式二
//onLincolnTwo();
}
/**
* 实现方式一 这个需要 implements ImageStateInterface 接口
*/
private void onLincoln() {
button = (Button) findViewById(R.id.button);
mTextView = (TextView) findViewById(R.id.tv);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadImageUtil downloadImageUtil = new DownloadImageUtil();
/**
调用StartDownLoad方法,目的是将MainActivity注册到接口那里,
使接口知道,需要调用的是哪个类中的实现该接口的方法。
*/
downloadImageUtil.StartDownLoad(MainActivity.this,
getApplicationContext());
}
});
}
@Override
public void onImageStart() {
Log.d("lincoln", "onImageStart");
button.setText("onImageStart");
mTextView.setText("onImageStart");
}
@Override
public void onImageSuccess(final Bitmap bitmap) {
Log.d("lincoln", "onImageSuccess");
runOnUiThread(new Runnable() {
@SuppressLint("NewApi")
@Override
public void run() {
button.setText("onImageSuccess");
mTextView.setText("onImageSuccess");
button.setBackground(new BitmapDrawable(bitmap));
}
});
}
@Override
public void onImageFailed() {
}
@Override
public void OnEnd() {
Toast.makeText(MainActivity.this, "完成啦!!", Toast.LENGTH_SHORT).show();
}
/**---------------------实现方式一 结束------------------------*/
/**
* --------------------------实现方式二-----------------------------
*/
private void onLincolnTwo() {
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadImageUtil.StartDownLoad(imageInterface,
MainActivity.this);
}
});
}
ImageStateInterface imageInterface = new ImageStateInterface() {
@Override
public void onImageStart() {
Log.d("lincoln", "onImageStart");
button.setText("onImageStart");
}
@Override
public void onImageSuccess(final Bitmap bitmap) {
Log.d("lincoln", "onImageSuccess");
runOnUiThread(new Runnable() {
@SuppressLint("NewApi")
@Override
public void run() {
button.setText("onImageSuccess");
button.setBackground(new BitmapDrawable(bitmap));
}
});
}
@Override
public void onImageFailed() {
}
@Override
public void OnEnd() {
Toast.makeText(MainActivity.this, "哈哈!!", Toast.LENGTH_SHORT).show();
}
};
/**-----------------------------------------------------------------------------*/
}
转载请注明原文地址: https://ju.6miu.com/read-14321.html