Android DataBinding实现地址三联动
来源:互联网 发布:ps名片源码 编辑:程序博客网 时间:2024/06/04 19:37
这篇文章主要是写关于Android实现地址三联动的功能,现在附上demo地址:https://github.com/qiuyueL/NewAddressDemo,里面会有详细的注释,以及控件的使用,其中还包括了一个PopupWindow的封装。先简单说一下PopupWindow的封装以及使用。
首先,先搭建一个PopupWindow视图的实现类,主要是实现一个通过泛型获取findViewById资源文件,直接通过ID来操作其中的事件方法,可以省略一个ID的注册步骤,先上一个跟目标demo相关的部分源码:
1 /** 2 * 操作PopupWindow视图的实现类 3 * Created by LQY on 2016/10/19. 4 */ 5 public class PopupViewHolder { 6 /** 7 * PopupWindow View 8 */ 9 View mPopupView;10 11 public PopupViewHolder(View view){12 mPopupView = view;13 }14 15 /**16 * 通过泛型获取findViewById资源文件17 */18 public final <T extends View> T getView(int viewId){19 return (T) mPopupView.findViewById(viewId);20 }21 22 public void setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener){23 AdapterView view = getView(viewId);24 view.setOnItemClickListener(listener);25 }26 27 public void setArrayAdapter(int viewId, ArrayAdapter adapter){28 ListView view = getView(viewId);29 view.setAdapter(adapter);30 }31 }
View Code
然后,抽象一个PopupWindow弹出对话框的类,代码如下:
1 /** 2 * PopupWindow弹出对话框抽象类 3 * Created by LQY on 2016/10/19. 4 */ 5 public abstract class CommonPopupWindow extends PopupWindow { 6 7 private Activity mActivity; 8 /** 9 * popup Layout10 */11 private View mPopupView;12 13 private int mPopupLayoutId;14 /**15 * PopupView实现类16 */17 PopupViewHolder popupView;18 19 public CommonPopupWindow(Activity activity, int LayoutId){20 mActivity = activity;21 mPopupLayoutId = LayoutId;22 }23 24 /**25 * 绑定布局资源26 */27 private void getPopupView{28 mPopupView = LayoutInflater.from(mActivity).inflate(mPopupLayoutId,null);29 popupView = new PopupViewHolder(mPopupView);30 showWindow(popupView);31 setContentView(mPopupView);32 }33 34 /**35 * 弹出下拉列表36 */37 public void listPopup(View view){38 getPopupView;39 setWidth(view.getWidth + 5);40 setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);41 ColorDrawable dw = new ColorDrawable(Color.WHITE);42 setBackgroundDrawable(dw);43 setOutsideTouchable(true);44 setFocusable(true);45 showAsDropDown(view);46 }47 48 /**49 * 弹出对话框以后50 */51 protected abstract void showWindow(PopupViewHolder view);52 }
View Code
注释写的比较明确了,在视图实现类上,大家还可以根据自己的需要,再添加一些方法,利用setText,setBackgroundResource等部分方法,里面的参数,以及方法体,可以模仿其中的来写,很容易。Demo里面有详细的代码,大家可以下载下来看看。
接下来,就是主要的地方,即如何利用DataBinding实现地址联动,和封装的PopupWindow如何使用。至于地址的Json解析在源码中都有注释,这里不做详细的讲解,就一概而过,现在很多的教程都在讲地址联动,可以只需要把解析那块用起来,也可以用我这个解析,不过我觉得我这个解析稍微复杂了点,因为需要根据索引值,来判定每一次选取的值,其实原理不难理解,就是在写的时候,可能是绕的比较多,需要做循环来取值。我这个解析也是参照了别人的方法,然后把需要的地方自己改了改。这里就不在赘述,有需要的可以下载源码看看,里面有详细的注释。现在说说封装的PopupWindow的使用,先上一段代码:
1 //弹出省列表 2 private void ProvincePopup { 3 mProvinceAdapter = new ArrayAdapter<String>(this,R.layout.popuwindow_lv_item,mProvinceDatas); 4 CommonPopupWindow mProvinceDialogue = new CommonPopupWindow(this, R.layout.posting_listview) { 5 @Override 6 protected void showWindow(PopupViewHolder popupView) { 7 popupView.setArrayAdapter(R.id.posting_list, mProvinceAdapter); 8 popupView.setOnItemClickListener(R.id.posting_list, new AdapterView.OnItemClickListener { 9 @Override10 public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {11 //将省的全部数据写入实体类中12 bean.setProvince(mProvinceDatas[position]);13 binding.setAddress(bean);14 //关闭列表15 dismiss;16 //根据选出的省更新市级的数据17 updateCity(mProvinceDatas[position]);18 }19 });20 }21 };22 //根据控件显示列表出现的位置23 mProvinceDialogue.listPopup(binding.provinceEdit);24 }25 private void updateCity(String pro){26 mCityDatas = mCitiesMap.get(pro);27 for (int i = 0;i < mCityDatas.length;i++){28 mCityAdapter = new ArrayAdapter<String>(this,R.layout.popuwindow_lv_item,mCityDatas);29 mCityAdapter.notifyDataSetChanged;30 }31 }
View Code
可以看到,这块在点击时,弹出下拉列表,那么弹出显示的位置方法,也已经标出了注释,主要的数据写入方式就是set方法,那么这个set方法其实映射的就是个实体类,只需要将实体类定义好,然后可以直接将数据写进去,就算跳转到别的页面,这个数据也不会丢失,更不需要将数据写入内存当中,然后在读取,大大的方便了使用。
不得不说,DataBinding的出现,大大的缩减了代码的行数,很多逻辑不需要想太多就能实现,大大的提高了工作效率。这里也只是简单的介绍了一些东西的实现方式,想具体了解的童鞋,可以到文章开头给出的地址去下载这个Demo,代码中都有详细的注释。希望可以帮助更多的人去认识DataBinding的好处。
- Android DataBinding实现地址三联动
- JavaScript实现年月日三联动
- 三联动
- XmlHttp实现无刷新三联动ListBox
- XmlHttp实现无刷新三联动ListBox
- Ajax实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- XmlHttp实现无刷新三联动下拉框
- XmlHttp实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- XmlHttp实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- JavaScript调用Web Services实现无刷新三联动
- XmlHttp实现无刷新三联动下拉框
- Ajax实现无刷新三联动下拉框
- 2016年中国大学生程序设计竞赛(杭州) A ArcSoft's Office Rearrangement(贪心)
- java中关于数据精度问题
- 冒泡排序
- JQuery中$.ajax()方法参数详解 jun转载
- Qt中的焦点事件
- Android DataBinding实现地址三联动
- android 利用SharedPreferences做的简单记住密码+自动登陆
- iOSTableView的代理函数
- boost的serialization库在win32和x64之间使用要注意
- error LNK1123:转换到 COFF 期间失败:文件无效或损坏
- Word在试图打开文件时遇到错误。
- USB3.0规范中译本 第七章 链路层(1)
- html5断点续传
- tf树的一些理解