初衷是由于有“城市选择”需求,但手上没有很趁手的框架,就根据自己的需求半天时间写了一个,并且学习了git上其它优秀框架的经验(后面会列出)。 由于时间仓促,需求比较急,所以代码方面可能有些瑕疵,稍微空闲下来就会重新优化一下。
- 优化启动速度
- 搭建侧边导航栏与列表的沟通
- 添加自动首字母识别与自动排序(为提高效率目前需要手动调用)
- 快速设置头部布局
- 支持AndroidX与support
- 优化代码结构
- 添加单独设置item icon功能
- 解决BUG
<dependency>
<groupId>com.cocoz.utilsz</groupId>
<artifactId>citypickerx</artifactId>
<version>0.6.6</version>
<type>pom</type>
</dependency>
implementation 'com.cocoz.utilsz:citypickerx:0.6.6' //必选
implementation 'com.android.support:recyclerview-v7:27.1.1' //必选
<dependency org="com.cocoz.utilsz" name="citypickerx" rev="0.6.6">
<artifact name="citypickerx" ext="pom"></artifact>
</dependency>
CityPickerXFragment cityPickerXFragment = CityPickerXFragment.startShow(MainTestActivity.this, getCityPickerConfig());
cityPickerXFragment.setPickerXInterface(new CommonPickerXInterface() {
@Override
public void onClick(CityBean cityBean) {
// 在此实现你的点击逻辑
Toast.makeText(getApplicationContext(), "you clicked " + cityBean.getName() + " , this is a " + cityBean.getType(), Toast.LENGTH_SHORT).show();
}
@Override
public void onDismiss() {
// 在此实现dismiss触发逻辑
Toast.makeText(getApplicationContext(), "dismiss", Toast.LENGTH_SHORT).show();
}
@Override
public void onSearch(String s) {
// 在此实现你的搜索逻辑
Toast.makeText(getApplicationContext(), "you search " + s, Toast.LENGTH_SHORT).show();
}
@Override
public void onInit() {
// 初始化完成后的请求
// 例如定位,更新
}
});
共三个模块,每个模块都可以使用HeadModelConfig进行配置.具体使用可查阅HeadModelConfig类中的备注
通过CityPickerConfig进行整个框架的配置 通过HeadModelConfig进行头部布局配置
// 您可前往MainTestActivity查看详细用法
// 或查看CityPickerConfig类中的备注
// 生成配置类
private CityPickerConfig getCityPickerConfig() {
HeadModelConfig locationConfig = new HeadModelConfig("当前定位", listLocation);
// setTag以用于更新数据
// setTag是头部配置非常重要的属性,是您修改更新头部数据重要的依据
// 建议您将tag设置为静态变量已方便调用,减少出错
locationConfig.setTag("当前定位");
HeadModelConfig recentConfig = new HeadModelConfig("最近访问", listRecent, true, "近", 0, 0);
recentConfig.setTag("最近访问");
HeadModelConfig hotConfig = new HeadModelConfig("热门城市", listHot, true, "热", 0, 0);
hotConfig.setTag("热门城市");
// 生成配置类 CityPickerConfig
// 最后cityPickerConfig中的listdata参数设置为null 则表示使用自带的数据库列表 否则可在此实现自定义列表数据
// 可查看下方备注
CityPickerConfig cityPickerConfig = new CityPickerConfig(locationConfig, recentConfig, hotConfig, null);
return cityPickerConfig;
}
// 应用配置
CityPickerXFragment.startShow(FragmentActivity activity, CityPickerConfig cityPickerConfig)
如果您只需要列表,在startShow时生成默认配置文件(直接调用new CityPickerConfig())即可。
默认会读取数据库文件中的城市列表
// 如需自定义列表,可使用设置数据
CityPickerConfig.setListData(List<CityBean> listData)
// 或在CityPickerConfig中设置数据
// 切换自定义/原始数据需要重新初始化CityPickerConfig<br/>
// 在CityPickerConfig中设置listData为空
建议您在设置列表之前(启动APP或获取城市列表后)使用CityDataInitUtils.initData进行初始化(识别首字母与排序)
建议您在回调onInit中调用如“定位”、“更新数据”。
使用以下方法:注意此处的tag与“自定义头部模块”部分的setTag为同一值
// 如何更新头部数据
cityPickerXFragment.updateData(String tag, List<CityBean> _listBeans);
// 如何更新列表数据
// isALL : 是否需要添加头部显示 false为只有列表 true为带头部模块
cityPickerXFragment.updateListData(List<CityBean> _listBeans, boolean isALL)
CityBean与HeadModelConfig均支持自定义未使用拓展字段"tag",或许您可以用得到
如果您的需求无法实现或者您有更好的想法,非常欢迎您在issue中与我交流。我认为这是很重要的学习提升的过程
- 修复异常调用bug
- 优化数据更新逻辑
- 删除onRest回调
- 新增onInit回调
- 重新上传jcenter,更新库地址
- 解决添加导入的时候报错gradle版本不匹配的bug
- 修复“头部模块”与侧导航栏联动不一致的问题
- 修复一个添加默认配置文件时数据异常的问题
- 更新dmeo
- 更新README.md
- 优化事件接口,统一修改为PickerXInterface
- 新增onReset事件
- 分割sample与lib包
- 新增列表刷新方法
- 修复列表数据更新BUG
- 修复列表与侧导航栏字母不匹配的BUG
- 新增头部与侧导航栏关联
zaaach的CityPicker城市选择框架
侧边分组导航栏
lichenwei.me的自定义分割线和组头实现(未找到原文链接)