无限层级的组织机构

来源:互联网 发布:淘宝开店理论知识 编辑:程序博客网 时间:2024/04/29 08:35

项目中用到的 按照自己的想法做了一个 大家有好的想法来交流一下

项目地址:https://github.com/caoweiaaa/OrganizationLevel

效果图:

层级部分用是自定义一个LinearLayou 可像里面放入TextView,下面是ExpandableListView 

LinearLayout中提供一个点击的接口和一个移除点击的位置之后的所有控件

package com.chs.organizationlevel.wedgit;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.LinearLayout;import com.chs.organizationlevel.R;/** * 作者:chs on 2015/12/31 15:24 * 邮箱:657083984@qq.com */public class MyLinearLayout extends LinearLayout {    private Context mContext;    private OnItemClickListener onItemClickListener;    public MyLinearLayout(Context context) {        super(context);        mContext = context;    }    public MyLinearLayout(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;    }   public interface OnItemClickListener{    void onItemClick(int position);   }    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {        this.onItemClickListener = onItemClickListener;    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        super.onLayout(changed, l, t, r, b);        final int count = getChildCount();        for(int i = 0;i<count;i++){            View view = getChildAt(i);            if(i>0){                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT);                layoutParams.setMargins(-40, 0, 0, 0);                view.setLayoutParams(layoutParams);            }            if((count-i)==1){                view.setBackgroundResource(R.mipmap.organization_bg_blue);            }else {                view.setBackgroundResource(R.mipmap.organization_bg_gray);            }            final int finalI = i;            view.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    if(count>1&&(count-finalI)!=1){                        onItemClickListener.onItemClick(finalI);                    }                }            });        }    }    public void removeView(int position){        int count = getChildCount();        int x = 0;        for(int i = 0;i<count;i++){            View view = null;            if(i>position){                view = getChildAt(i-x);                removeView(view);                x++;            }        }    }}

数据是后台给的一个json ,项目中可以让后台给传这种格式的json 无限极扩展


0 0