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

来源:互联网 发布:网络局域网上不了 编辑:程序博客网 时间:2024/06/08 03:15

第二阶段:创建GroupView

RowView已经创建好,将RowView装进GroupView

一、创建RowDescriptor

作用:描述RowView包含的信息,当添加不同样式的RowView时,同时创建相对应的Descriptor即可

public class RowDescriptor { public int iconResId; // 资源id public String label; // 描述 public RowActionEnum actionEnum; // 动作 public RowDescriptor(int iconResId, String label, RowActionEnum actionEnum) {  super();  this.iconResId = iconResId;  this.label = label;  this.actionEnum = actionEnum; }}

二、创建GroupView,这里继承LinearLayout

1、初始化视图

private void initializeView(Context context) {  this.context = context;  // 设置GroupView中RowView的排列样式  setOrientation(VERTICAL); }

2、初始化数据
传递的不再是单个的RowView而是RowView集合

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

3、更新数据

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;    // 创建RowView   for (int i = 0; i < length; i++) {    rowView = new RowView(context);    rowView.initializeData(descriptors.get(i), 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);  } }

三、修改RowView,将initializeData()方法中的参数修改成描述对象而不再是单个的属性参数

1、初始化数据

public void initializeData(RowDescriptor descriptor, OnRowClickListener listener) {  this.descriptor = descriptor;  this.listener = listener; }

2、更改数据

public void notifyDataChanged() {  if (descriptor != null) {   mWidgetRowIconImg.setBackgroundResource(descriptor.iconResId);   mWidgetRowLabel.setText(descriptor.label);   if (descriptor.actionEnum != null) {    setOnClickListener(this);    setBackgroundResource(R.drawable.widgets_general_row_selector);    mWidgetRowActionBtn.setVisibility(View.VISIBLE);   } else {    mWidgetRowActionBtn.setVisibility(View.GONE);   }  } else {   setVisibility(View.GONE);  } }

3、相应点击事件

@Override public void onClick(View v) {  if (listener != null) {   listener.onRowClick(descriptor.actionEnum);  } }

四、activity_main中引用自定义GroupView

<com.example.fsf_view.widgets.group.GroupView        android:id="@+id/mWidgetGroupView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:background="@color/withe" />

五、MainActivity中引用自定义GroupView

private void getGroupView() {  mWidgetGroupView = (GroupView)findViewById(R.id.mWidgetGroupView);  List<RowDescriptor> descriptors = new ArrayList<RowDescriptor>();  descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts One", RowActionEnum.MY_POSTS_ONE));  descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts Two", RowActionEnum.MY_POSTS_TWO));  descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts Three", RowActionEnum.MY_POSTS_THREE));  mWidgetGroupView.initializeData(descriptors, this);  mWidgetGroupView.notifyDataChanged(); }

========第二阶段完=========

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

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

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

0 0