目的:实现不同类型之间的数据通信。
例子1:
借口:
public interface MsgListener { void onMessageArriverd(String msg); }
数据接收类
public class Receiver implements MsgListener{ @Override public void onMessageArriverd(String msg) { Log.i("kelijun","Receiver MSG"); //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show(); } }
数据发送类
public class Send extends Activity{ private Receiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mReceiver=new Receiver(); mReceiver.onMessageArriverd("你好"); } }这个例子是发送消息给实现了接口的类,直接调用。
例子2:设置消息的监听,如果有消息了,将把消息发送给监听了这个消息的人。如果有很多类 ,设置了监听这个消息,那么这些类都会收到消息。
public interface MsgListener { void onMessageArriverd(String msg); }
2个接收数据的实现了接口的类
接口
public class Receiver implements MsgListener{ @Override public void onMessageArriverd(String msg) { Log.i("kelijun","Receiver MSG"); //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show(); } }发送数据的类
public class Receiver1 implements MsgListener{ @Override public void onMessageArriverd(String msg) { Log.i("kelijun","Receiver MSG 1"); //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show(); } }
public class Send extends Activity{ private Receiver mReceiver; private Receiver1 mReceive1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mReceiver=new Receiver(); mReceive1=new Receiver1(); setMsgListener(mReceiver); setMsgListener(mReceive1); msgListener.onMessageArriverd("你好"); } private MsgListener msgListener; public void setMsgListener(MsgListener msgListener) { this.msgListener = msgListener; } }
这里是不能达到目的的(测试过,只有后面receiver1才有打印),这个因为很多事情往往只是说如何做可以办到,但是你去做的时候往往结果不一样,就是因为我们人的思路是不一样的,比如有一个人对你说,抢银行赚了很多钱,你不要参照他的做法,你听过一句名言吗?失败是成功之母,所以我们只要学习失败,比如上面的例子,我们要思考为什么不可以,不要背那种方法可以。我觉得这才是学习之路,永远是思考,不是盲从,忙背。
比如我们国家中国,很多时候说什么GDP今天又增加了多少,人们的生活水平又如何升高了,人们是过的很好,我觉的应该把焦点放在失败的地方,比如说今天有多少人做了不喜欢的工作,又有多少人为了省钱饿肚子,看见喜欢的水果舍不得买,这样我们才有动力去完善我们的不足。失败是成功之母,为什么这句话大家不好好实践。把注意力放在不足的地方,然后去学习,去改正啊。
好了,其实我也不清楚上面的接口怎么实现的,那么我去想为什么,怎么才能办得到。
那么我修改一下
setMsgListener(mReceive1); setMsgListener(mReceiver);发现只有
mReceiver接收到消息,说明只有后面设置监听的人收到消息,前面的被覆盖了。那么我们去找到一种不能被覆盖的方法。
查资料然后改进后:
public class Send extends Activity { private List<MsgListener> msgListeners; private Receiver mreReceiver; private Receiver1 mreReceiver1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); msgListeners = new ArrayList<>(); mreReceiver = new Receiver(); mreReceiver1 = new Receiver1(); addListener(mreReceiver); addListener(mreReceiver1); for (int i = 0; i < msgListeners.size(); i++) { MsgListener l = msgListeners.get(i); l.onMessageArriverd("你好"); } } public void addListener(MsgListener l) { msgListeners.add(l); } }意思就是,必须要给每一个接口发送消息才行。