android开源项目之OTTO事件总线(二)官方demo解说
官方demo见 https://github.com/square/otto
注意自己该编译版本为2.3以上,默认的1.6不支持match_parent属性,导致布局文件出错。
另外需要手动添加android-support-v4和otto到自己的libs文件夹。
主要代码逻辑:
1,在主页面点clear按钮,发布两个事件并传递对象。
2,然后LocationHistoryFragment接收事件对象,并处理。
1,BusProvider提供一个全局唯一的Bus实例对象
调用的时候使用MyProvider.getBusInstance()
/*
* Copyright (C) 2012 Square, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ package com.squareup.otto.sample; import com.squareup.otto.Bus; /**
* Maintains a singleton instance for obtaining the bus. Ideally this would be replaced with a more efficient means
* such as through injection directly into interested classes.
*/
public final class BusProvider {
private static final Bus BUS = new Bus(); public static Bus getInstance() {
return BUS;
} private BusProvider() {
// No instances.
}
}
BusProvider
2,LocationActivity为主页面
点击clear按钮会发布两个事件对象,LocationClearEvent和LocationChangedEvent
findViewById(R.id.clear_location).setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
// Tell everyone to clear their location history.
//清除位置
BusProvider.getInstance().post(new LocationClearEvent());
// Post new location event for the default location.
//重新加载默认的位置
lastLatitude = DEFAULT_LAT;
lastLongitude = DEFAULT_LON;
BusProvider.getInstance().post(produceLocationEvent());
}
});
要使用事件总线别忘了注册和反注册
@Override protected void onResume() {
super.onResume();
// Register ourselves so that we can provide the initial value.
BusProvider.getInstance().register(this);
}
@Override protected void onPause() {
super.onPause();
// Always unregister when an object no longer should be on the bus.
BusProvider.getInstance().unregister(this);
}
3,上文提到的事件发送时要传递的两个对象LocationChangedEvent对象和LocationClearEvent
可以根据自己喜好,任意设置对象。代码见demo
4,LocationHistoryFragment里接收事件对象
同样需要注册和反注册。有时我们在服务里发布事件,则无需注册
@Subscribe public void onLocationChanged(LocationChangedEvent event) {
locationEvents.add(, event.toString());
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
@Subscribe public void onLocationCleared(LocationClearEvent event) {
locationEvents.clear();
if (adapter != null) {
adapter.notifyDataSetChanged();
}
android开源项目之OTTO事件总线(二)官方demo解说的更多相关文章
- android开源项目之OTTO事件总线(一)
Otto是由Square发布的一个着重于Android支持的基于Guava的强大的事件总线,在对应用程序不同部分进行解耦之后,仍然允许它们进行有效的沟通. 开源项目地址:https://github. ...
- GitHub上不错的Android开源项目(二)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) 系列文章如下: GitHub上不错的Android开源项目(一):h ...
- 直接拿来用!最火的Android开源项目(二)(转)
GitHub上的开源项目不胜枚举,通过这些项目,也能让开发者在应用开发过程中事半功倍,作为开发者的你,在用这些开源项目吗?今天我们将介绍另外20个在GitHub上备受欢迎的Android开源项目,你准 ...
- 最火的Android开源项目(二)
在<直接拿来用!最火的Android开源项目(一)>中,我们详细地介绍了GitHub上最受欢迎的TOP20 Android开源项目,引起了许多读者的热议,作为开发者,你最常用的是哪些开源项 ...
- 直接拿来用!最火的Android开源项目(二)
在<直接拿来用!最火的Android开源项目(一)>中,我们详细地介绍了GitHub上最受欢迎的TOP20 Android开源项目,引起了许多读者的热议,作为开发者,你最常用的是哪些开源项 ...
- Android开源项目分类汇总
目前包括: Android开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- GitHub 优秀的 Android 开源项目(转)
今天查找资源时看到的一篇文章,总结了很多实用资源,十分感谢原作者分享. 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介 ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
随机推荐
- 【[JLOI2014]松鼠的新家】
//第一次A掉紫题就来写题解,我是不是疯了 //说实话这道题还是比较裸的树上差分 //对于树上的一条路径(s,t),我们只需要把ch[s]++,ch[t]++,ch[LCA(S,T)]--,再把lca ...
- 关于TOCTTOU攻击的简介
前言 最近看到了一些以 at 结尾的Linux系统调用,在维基百科上面说这可以防御一些特定的TOCTTOU攻击,而在TOCTTOU对应页面中并没有中文版的介绍,而且百度的结果也比较少,于是决定抽空写一 ...
- 【Oracle】三个配置文件tnsnames-listener-sqlnet介绍【转】
转自:博客园-oracle: listener.ora .sqlnet.ora .tnsnames.ora的配置及例子 介绍三个配置文件 1)listener.ora 2)sqlnet.ora 3)t ...
- linux 使用sqlite3
:c中使用sqlite3需要调用函数接口操作: sqlite3 *db; int status=sqlite_open("dbname",&db);//打开或者创建数据库 ...
- mysql的子查询in()操作及按指定顺序显示
代码示例: in(逗号分隔开的值列表) 释:是否存在于值列表中 --------------------- 示例: select * from test where id in(3,1,5) orde ...
- oracle 完整性约束的禁用启用以及对表的影响,表的修改和复制
primary key ----表的唯一性约束,不能为空,且不能有重复值 foreign key ----俩表之间的约束,启用之时,在删除数据时需要先删除父表数据,再删除子表数据 禁用方式为:alte ...
- xcode运行时候 You don’t have permission.
xcode 不能运行,提示没有权限 是因为使用第三方框架有plist文件存在
- MySQL提升课程 全面讲解MySQL架构设计
1:并发量:同一时间处理请求数量,同一时间处理请求数量和连接数量是两个概念,连接数大于处理请求数量, MySQL参数最大连接数max_connections 这是是查询数据库当前设置的最大连接数 my ...
- SmallMQ实现发布
最近一直学习,主要处理java的分布式,MQ,RPC,通信,数据库,缓存等方向. 一般现在的MQ都是企业级的,庞大,功能齐全.最主要是代码量大,对于我们这些小程序员而言,太大,修改困难,修复更加困难, ...
- 【TOJ 1912】487-3279(hash+map)
描述 Businesses like to have memorable telephone numbers. One way to make a telephone number memorable ...