自定义UI(由下而上版)之第三阶段

来源:互联网 发布:怎样删除淘宝评价照片 编辑:程序博客网 时间:2024/05/18 00:35

第三阶段:创建ContainerView

这里继承LineaLayout,也可继承ScrollView,这样页面可以滑动,根据自己的需求确定
一、创建GroupViewDescriptor,描述GroupView的属性

public class GroupDescriptor { public String title; public List<RowDescriptor> descriptors; public GroupDescriptor(String title, List<RowDescriptor> descriptors) {  this.title = title;  this.descriptors = descriptors; } public GroupDescriptor(List<RowDescriptor> descriptors) {  this.descriptors = descriptors; }}

二、创建ContainerView

1、初始化数据

public void initializeData(List<GroupDescriptor> descriptors, OnRowClickListener listener) {  this.descriptors = descriptors;  this.listener = listener;  setOrientation(VERTICAL); }

2、通知数据更新

 public void notifyDataChanged() {  if (descriptors != null && descriptors.size() > 0) {   GroupView group = null;   float density = context.getResources().getDisplayMetrics().density;   LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);   params.topMargin = (int)(20 * density);   for (GroupDescriptor descriptor : descriptors) {    group = new GroupView(context);    group.initializeData(descriptor, listener);    group.notifyDataChanged();    addView(group, params);   }   setVisibility(View.VISIBLE);  } else {   setVisibility(View.GONE);  } }

三、更新GroupView,将initializeData()方法中的参数List descriptors换成GroupDescriptor descriptor,以下所需数据出依次修改

public void initializeData(GroupDescriptor descriptor, OnRowClickListener listener) {  this.title = descriptor.title;  this.descriptors = descriptor.descriptors;  this.listener = listener; }public void notifyDataChanged() {  if (descriptors != null && descriptors.size() > 0) {   int length = descriptors.size();   RowView rowView = null;   View line = null;   LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 1);   params.leftMargin = 10;   RowDescriptor descriptor = null;   for (int i = 0; i < length; i++) {    descriptor = descriptors.get(i);    rowView = new RowView(context);    rowView.initializeData(descriptor, listener);    rowView.notifyDataChanged();    addView(rowView);    if (i != length - 1) {     line = new View(context);     line.setBackgroundResource(R.color.widget_general_row_line);     addView(line, params);    }   }  } else {   setVisibility(View.GONE);  } }

四、调用代码查看MainActivity文件以下方法

 // RowView  getRowView();  // GroupView  getGroupView();  // ContainerView  getContainerView();

最终效果图:
效果图

由下而上版框架链接目录:

第一阶段:自定义RowView
第二阶段:创建GroupView
第三阶段:创建ContainerView

相关知识来源:
stay老兄的有心课堂-自定义RowView

0 0