[
  {
    "path": ".gitignore",
    "content": "#built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# generated files\nbin/\ngen/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Windows thumbnail db\nThumbs.db\n\n# OSX files\n.DS_Store\n\n# Eclipse project files\n.classpath\n.project\n\n# Android Studio\n*.iml\n.idea\n#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.\n.gradle\nbuild/"
  },
  {
    "path": "README.md",
    "content": "# ExpandTable\n完全高仿58同城 点击展开的表格效果\n使用tablelayout 来实现\n\n### 效果图:\n![](https://github.com/haibuzou/ExpandTable/raw/master/art/ScreenGif.gif) \n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 22\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        applicationId \"com.haibuzou.myapplication\"\n        minSdkVersion 14\n        targetSdkVersion 22\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:22.2.0'\n    compile files('libs/gson-2.2.1.jar')\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:\\adt-bundle-windows-x86_64-20130917\\sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.haibuzou.myapplication\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\">\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/MainActivity.java",
    "content": "package com.haibuzou.myapplication;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support.v4.view.ViewPager;\nimport android.support.v4.view.ViewPager.OnPageChangeListener;\nimport android.util.TypedValue;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.animation.Animation;\nimport android.view.animation.Transformation;\nimport android.widget.GridView;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.TableLayout;\n\n\nimport com.haibuzou.myapplication.adapter.ExpandGridAdapter;\nimport com.haibuzou.myapplication.adapter.MyViewPagerAdapter;\nimport com.haibuzou.myapplication.entity.BaseData;\nimport com.haibuzou.myapplication.entity.ZhaoPin;\nimport com.haibuzou.myapplication.view.CurrenPositionView;\nimport com.haibuzou.myapplication.view.MyTextView;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n\npublic class MainActivity extends Activity implements ExpandGridAdapter.OnClick {\n\n    //招聘数据\n    private List<ZhaoPin> data;\n    private LinearLayout currenPositionLinear;\n    private final Integer duration = 200;\n    private RelativeLayout rel;\n    private String itemId;\n    //记录点击位置\n    private String clickPosition = \"\";\n    private MyTextView clicktxt;\n    //下拉的 圆点显示layout\n    private LinearLayout circlelayout;\n    private int lastlocation = -1;\n    private ExpandGridAdapter.OnClick listener;\n    //每行显示条目个数\n    private static final int NUM_LINE = 3;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        initData();\n        initView();\n    }\n\n    private void initView() {\n        currenPositionLinear = (LinearLayout) findViewById(R.id.zp_curr_potion_linear);\n        for (int num = 0; num < data.size(); num++) {\n            ZhaoPin zhaoPin = data.get(num);\n            CurrenPositionView currenPositionView = new CurrenPositionView(this);\n            currenPositionView.setData(zhaoPin);\n            currenPositionView.setViewId(num);\n            currenPositionView.init();\n            if (num > 0) {\n                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n                params.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());\n                if (num == data.size() - 1) {\n                    params.bottomMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());\n                }\n                currenPositionLinear.addView(currenPositionView, params);\n            } else {\n                currenPositionLinear.addView(currenPositionView);\n            }\n\n        }\n    }\n\n    private void initData() {\n        if (listener == null) {\n            listener = this;\n        }\n        if (data == null) {\n            data = Utils.getJobType(this);\n        }\n    }\n\n    public class OnItemClick implements OnClickListener, OnPageChangeListener {\n        private final int position;\n        private final int tag;\n        private final MyTextView view;\n        private final TableLayout tableLayout;\n        private final ZhaoPin zhaoPin;\n\n        public OnItemClick(ZhaoPin zhaoPin, int position, int tag, TableLayout table, MyTextView view) {\n            this.position = position;\n            this.tag = tag;\n            this.view = view;\n            this.tableLayout = table;\n            this.zhaoPin = zhaoPin;\n        }\n\n        @Override\n        public void onPageScrollStateChanged(int arg0) {\n\n        }\n\n        @Override\n        public void onPageScrolled(int arg0, float arg1, int arg2) {\n            if (lastlocation != arg0 && lastlocation != -1) {\n                ImageView mimage = (ImageView) circlelayout\n                        .findViewWithTag(lastlocation + 1 + 10);\n                if (mimage != null) {\n                    mimage.setImageResource(R.mipmap.black_circle);\n                }\n            }\n\n            ImageView image = (ImageView) circlelayout\n                    .findViewWithTag(arg0 + 1 + 10);\n            if (image != null) {\n                image.setImageResource(R.mipmap.orange_circle);\n            }\n\n            lastlocation = arg0;\n        }\n\n        @Override\n        public void onPageSelected(int arg0) {\n\n        }\n\n        private void init(View v, int location) {\n            List<BaseData> list;\n            ViewPager pager = (ViewPager) v.findViewById(R.id.expand_item);\n            // 底部的圆点初始化\n            circlelayout = (LinearLayout) v.findViewById(R.id.circle_layout);\n            circlelayout.removeAllViews();\n            int radio = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics());\n            // 初始化一个params 用于圆点大小设置\n            LinearLayout.LayoutParams circleparams = new LinearLayout.LayoutParams(radio, radio);\n            circleparams.setMargins(0, 0, 10, 0);\n            List<View> views = new ArrayList<>();\n            // 下拉表格的行数\n            int row = zhaoPin.getJobtype().get(location).getJobtype().size() / NUM_LINE;\n            if (row > 4) {\n                row = 4;\n            } else if (row < 4) {\n                if (zhaoPin.getJobtype().get(location).getJobtype().size() % NUM_LINE != 0) {\n                    row += 1;\n                }\n            }\n            // 计算生成 view的数量\n            int i = zhaoPin.getJobtype().get(location).getJobtype().size() / 12;\n            int len = zhaoPin.getJobtype().get(location).getJobtype().size() % 12;\n            if (len > 0) {\n                i += 1;\n            }\n            // View的 初始化\n            for (int n = 1; n <= i; n++) {\n                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.viewpager, null);\n                GridView grid = (GridView) view.findViewById(R.id.expand_grid);\n                // 计算每个 gridview 存放多少数据\n                if (i == 0) {\n                    list = zhaoPin.getJobtype().get(location).getJobtype();\n                } else if (n < i) {\n                    // 每一个 表只有3列 最多 4行 每个表最多12个\n                    list = zhaoPin.getJobtype().get(location).getJobtype().subList((n - 1) * 12, n * 12);\n                } else {\n                    int size = zhaoPin.getJobtype().get(location).getJobtype().size();\n                    list = zhaoPin.getJobtype().get(location).getJobtype().subList((n - 1) * 12, size);\n                }\n                ExpandGridAdapter ea = new ExpandGridAdapter(MainActivity.this, list, R.layout.expand_grid_item);\n                ea.setOnClick(listener);\n                grid.setAdapter(ea);\n                views.add(grid);\n                if (i > 1) {\n                    circlelayout.setVisibility(View.VISIBLE);\n                    // viewpager 底部的 点标识\n                    ImageView image = new ImageView(MainActivity.this);\n                    image.setTag(n + 10);\n                    image.setImageResource(R.mipmap.black_circle);\n                    circlelayout.addView(image, circleparams);\n                } else {\n                    circlelayout.setVisibility(View.GONE);\n                }\n            }\n            MyViewPagerAdapter mpa = new MyViewPagerAdapter(views);\n            // 宽度每一个格高度 42dp 转成px\n            int height = (int) (MainActivity.this.getResources().getDisplayMetrics().density * 42 + 0.5f);\n            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, row * height);\n            pager.setLayoutParams(params);\n            pager.setAdapter(mpa);\n            pager.setOnPageChangeListener(this);\n        }\n\n        // 收缩动画\n        private void collapse(final View v) {\n            final int initialHeight = v.getMeasuredHeight();\n            Animation animation = new Animation() {\n                @Override\n                protected void applyTransformation(float interpolatedTime,\n                                                   Transformation t) {\n                    // interpolatedTime 0-1 进行变化 为1的时候表示动画已经完成\n                    if (interpolatedTime == 1) {\n                        v.setVisibility(View.GONE);\n                    } else {\n                        // 同样的原理 让控件的高度不断变化\n                        v.getLayoutParams().height = initialHeight\n                                - (int) (initialHeight * interpolatedTime);\n                        v.requestLayout();\n                    }\n                }\n\n                @Override\n                public boolean willChangeBounds() {\n                    return true;\n                }\n            };\n\n            animation.setDuration(duration);\n            v.startAnimation(animation);\n        }\n\n        // 展开动画\n        private void expand(final View v, int location) {\n            init(v, location);\n            v.measure(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n            final int targetHeight = v.getMeasuredHeight();\n            // 最开始显示下拉控件的时候 将高度设为0 达到不显示的效果\n            v.getLayoutParams().height = 0;\n            v.setVisibility(View.VISIBLE);\n\n            Animation animation = new Animation() {\n                @Override\n                protected void applyTransformation(float interpolatedTime,\n                                                   Transformation t) {\n                    // 不断变化高度来显示控件\n                    v.getLayoutParams().height = (interpolatedTime == 1) ? RelativeLayout.LayoutParams.WRAP_CONTENT\n                            : (int) (targetHeight * interpolatedTime);\n                    v.requestLayout();\n                }\n\n                @Override\n                public boolean willChangeBounds() {\n                    return true;\n                }\n            };\n            animation.setDuration(duration);\n            v.startAnimation(animation);\n        }\n\n        @Override\n        public void onClick(View v) {\n            String tempTag = (String) v.getTag();\n            if (rel == null) {\n                rel = (RelativeLayout) tableLayout.findViewWithTag(tag);\n                expand(rel, position);\n                view.isDraw(true);\n            } else {\n                if (rel.getVisibility() == View.VISIBLE) {\n                    collapse(rel);\n                    view.isDraw(false);\n                } else {\n                    if (tempTag.equals(clickPosition)) {\n                        expand(rel, position);\n                    }\n                    view.isDraw(true);\n                }\n\n                if (!tempTag.equals(clickPosition)) {\n                    rel = (RelativeLayout) tableLayout.findViewWithTag(tag);\n                    expand(rel, position);\n                    // 上一次的箭头去除\n                    clicktxt.isDraw(false);\n                    view.isDraw(true);\n                }\n            }\n            clickPosition = tempTag;\n            clicktxt = view;\n        }\n    }\n\n    @Override\n    public void onClick(int dataId, String str) {\n        Intent intent = new Intent();\n        intent.putExtra(\"id\", dataId);\n        intent.putExtra(\"value\", str);\n        setResult(RESULT_OK, intent);\n        finish();\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/Utils.java",
    "content": "package com.haibuzou.myapplication;\n\nimport android.content.Context;\n\nimport com.google.gson.Gson;\nimport com.google.gson.reflect.TypeToken;\nimport com.haibuzou.myapplication.entity.ZhaoPin;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.InputStream;\nimport java.util.List;\n\n/**\n * Created by AAA on 2015/6/16.\n */\npublic class Utils {\n    public static List<ZhaoPin> getJobType(Context context) {\n        String result = readFileFromRaw(context, R.raw.zhaopin);\n        if (result != null) {\n            Gson gson = new Gson();\n            return gson.fromJson(result, new TypeToken<List<ZhaoPin>>() {\n            }.getType());\n        }\n        return null;\n    }\n\n    /**\n     * 读取Raw文件夹下文本类型文件\n     *\n     * @param context    上下文\n     * @param resourceId 资源id\n     * @return 返回的读取完成的数据 string格式\n     */\n    public static String readFileFromRaw(Context context, int resourceId) {\n        if (null == context || resourceId < 0) {\n            return null;\n        }\n\n        String result = null;\n        try {\n            InputStream input = context.getResources().openRawResource(resourceId);\n            ByteArrayOutputStream output = new ByteArrayOutputStream();\n            byte[] buffer = new byte[1024];\n            int length;\n            while ((length = input.read(buffer)) != -1) {\n                output.write(buffer, 0, length);\n            }\n            output.close();\n            input.close();\n            return output.toString();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/adapter/CommonAdapter.java",
    "content": "package com.haibuzou.myapplication.adapter;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport android.content.Context;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.BaseAdapter;\n\npublic abstract class CommonAdapter<T> extends BaseAdapter {\n    protected LayoutInflater mInflater;\n    protected Context mContext;\n    protected List<T> mDatas;\n    protected final int mItemLayoutId;\n\n    public CommonAdapter(Context context, int itemLayoutId) {\n        this.mContext = context;\n        this.mInflater = LayoutInflater.from(mContext);\n        this.mDatas = new ArrayList<T>();\n        this.mItemLayoutId = itemLayoutId;\n    }\n\n    public CommonAdapter(Context context, List<T> mDatas, int itemLayoutId) {\n        this.mContext = context;\n        this.mInflater = LayoutInflater.from(mContext);\n        this.mDatas = mDatas;\n        this.mItemLayoutId = itemLayoutId;\n    }\n\n    @Override\n    public int getCount() {\n        return mDatas != null ? mDatas.size() : 0;\n    }\n\n    @Override\n    public T getItem(int position) {\n        return mDatas.get(position);\n    }\n\n    @Override\n    public long getItemId(int position) {\n        return position;\n    }\n\n    @Override\n    public View getView(int position, View convertView, ViewGroup parent) {\n        final ViewHolder viewHolder = getViewHolder(position, convertView,\n                parent);\n        convert(viewHolder, getItem(position));\n        return viewHolder.getConvertView();\n\n    }\n\n    public abstract void convert(ViewHolder helper, T item);\n\n    private ViewHolder getViewHolder(int position, View convertView,\n                                     ViewGroup parent) {\n        return ViewHolder.get(mContext, convertView, parent, mItemLayoutId,\n                position);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/adapter/ExpandGridAdapter.java",
    "content": "package com.haibuzou.myapplication.adapter;\n\nimport java.util.List;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\nimport com.haibuzou.myapplication.R;\nimport com.haibuzou.myapplication.entity.BaseData;\n\n/**\n * Created by AAA on 2015/6/16.\n */\npublic class ExpandGridAdapter extends CommonAdapter<BaseData> {\n    private OnClick listener;\n\n    public ExpandGridAdapter(Context context, List<BaseData> mDatas,\n                             int itemLayoutId) {\n        super(context, mDatas, itemLayoutId);\n    }\n\n    @Override\n    public void convert(ViewHolder helper, final BaseData item) {\n        helper.setText(R.id.expand_grid_txt, item.getName());\n        View view = helper.getView(R.id.expand_grid_txt);\n        view.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                if (listener != null) {\n                    listener.onClick(item.getDataId(), item.getName());\n                }\n\n            }\n        });\n    }\n\n    public interface OnClick {\n        void onClick(int dataId, String str);\n    }\n\n    public void setOnClick(OnClick listener) {\n        this.listener = listener;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/adapter/MyViewPagerAdapter.java",
    "content": "package com.haibuzou.myapplication.adapter;\n\nimport android.support.v4.view.ViewPager;\nimport android.view.View;\n\nimport java.util.List;\n\npublic class MyViewPagerAdapter extends android.support.v4.view.PagerAdapter {\n\n    private final List<View> mlistViews;\n\n\n    public MyViewPagerAdapter(List<View> mlistViews) {\n        this.mlistViews = mlistViews;\n    }\n\n    @Override\n    public int getCount() {\n        return mlistViews.size();\n    }\n\n\n    @Override\n    public int getItemPosition(Object object) {\n        return super.getItemPosition(object);\n    }\n\n    @Override\n    public Object instantiateItem(View container, int position) {\n        ((ViewPager) container).addView(mlistViews.get(position));\n        return mlistViews.get(position);\n    }\n\n    @Override\n    public void destroyItem(View arg0, int arg1, Object arg2) {\n        ((ViewPager) arg0).removeView(mlistViews.get(arg1));\n    }\n\n    @Override\n    public boolean isViewFromObject(View arg0, Object arg1) {\n        return arg0 == arg1;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/adapter/ViewHolder.java",
    "content": "package com.haibuzou.myapplication.adapter;\n\nimport java.lang.ref.SoftReference;\nimport java.lang.reflect.Constructor;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.util.SparseArray;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\npublic class ViewHolder {\n    private final SparseArray<SoftReference<View>> mViews;\n    private final SparseArray<SoftReference<View>> childViews;\n    private int mPosition;\n    private final View mConvertView;\n    private final ViewGroup parent;\n\n    private ViewHolder(Context context, ViewGroup parent, int layoutId,\n                       int position) {\n        this.mPosition = position;\n        this.parent = parent;\n        this.mViews = new SparseArray<SoftReference<View>>();\n        this.childViews = new SparseArray<SoftReference<View>>();\n        mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,\n                false);\n        // setTag\n        mConvertView.setTag(this);\n    }\n\n    private ViewHolder(Context context, ViewGroup parent, View view,\n                       int position) {\n        this.mPosition = position;\n        this.parent = parent;\n        this.mViews = new SparseArray<SoftReference<View>>();\n        this.childViews = new SparseArray<SoftReference<View>>();\n        mConvertView = view;\n        // setTag\n        mConvertView.setTag(this);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public static <T extends View> T get(View view, int id) {\n        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();\n        if (viewHolder == null) {\n            viewHolder = new SparseArray<View>();\n            view.setTag(viewHolder);\n        }\n        View childView = viewHolder.get(id);\n        if (childView == null) {\n            childView = view.findViewById(id);\n            viewHolder.put(id, childView);\n        }\n        return (T) childView;\n    }\n\n    /**\n     * 拿到一个ViewHolder对象\n     *\n     * @param context\n     * @param convertView item view\n     * @param parent      父控件\n     * @param layoutId    布局id\n     * @param position    位置\n     * @return\n     */\n    public static ViewHolder get(Context context, View convertView,\n                                 ViewGroup parent, int layoutId, int position) {\n        ViewHolder holder;\n        if (convertView == null) {\n            holder = new ViewHolder(context, parent, layoutId, position);\n        } else {\n            holder = (ViewHolder) convertView.getTag();\n            holder.mPosition = position;\n        }\n        return holder;\n    }\n\n    /**\n     * 拿到一个ViewHolder对象\n     *\n     * @param context\n     * @param convertView\n     * @param parent      母控件\n     * @param position    点击位置\n     * @return\n     */\n    public static ViewHolder get(Context context, View convertView,\n                                 ViewGroup parent, Class<? extends View> view, int position) throws Exception {\n        ViewHolder holder;\n        if (convertView == null) {\n            Constructor<?> constructor = view.getConstructor(Context.class);\n            View contentView = (View) constructor.newInstance(context);\n            holder = new ViewHolder(context, parent, contentView, position);\n        } else {\n            holder = (ViewHolder) convertView.getTag();\n            holder.mPosition = position;\n        }\n        return holder;\n    }\n\n    public View getConvertView() {\n        return mConvertView;\n    }\n\n    /**\n     * 通过控件的Id获取对于的控件，如果没有则加入views\n     *\n     * @param viewId\n     * @return\n     */\n    public <T extends View> T getView(int viewId) {\n        View view = mViews.get(viewId) != null ? mViews.get(viewId).get() : null;\n        if (view == null) {\n            view = mConvertView.findViewById(viewId);\n            mViews.put(viewId, new SoftReference<View>(view));\n        }\n        return (T) view;\n    }\n\n    /**\n     * 为TextView设置字符串\n     *\n     * @param viewId\n     * @param text\n     * @return\n     */\n    public ViewHolder setText(int viewId, String text) {\n        TextView view = getView(viewId);\n        view.setText(text);\n        return this;\n    }\n\n    /**\n     * 为ImageView设置图片\n     *\n     * @param viewId\n     * @param drawableId\n     * @return\n     */\n    public ViewHolder setImageResource(int viewId, int drawableId) {\n        ImageView view = getView(viewId);\n        view.setImageResource(drawableId);\n\n        return this;\n    }\n\n    /**\n     * 为ImageView设置图片\n     *\n     * @param viewId\n     * @param bm\n     * @return\n     */\n    public ViewHolder setImageBitmap(int viewId, Bitmap bm) {\n        ImageView view = getView(viewId);\n        view.setImageBitmap(bm);\n        return this;\n    }\n\n    /**\n     * 临时创建view，但不显示\n     *\n     * @param viewId    view的 id\n     * @param childView 子view\n     */\n    public void setChildView(int viewId, View childView) {\n        if (getView(viewId) == null) {\n            return;\n        }\n        childViews.put(viewId, new SoftReference<View>(childView));\n    }\n\n    /**\n     * 获取子view\n     *\n     * @param viewId\n     */\n    public <T extends View> T getChildView(int viewId) {\n        View view = childViews.get(viewId) != null ? childViews.get(viewId).get() : null;\n        return (T) view;\n    }\n\n    public ViewGroup getParent() {\n        return parent;\n    }\n\n    public int getPosition() {\n        return mPosition;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/entity/BaseData.java",
    "content": "package com.haibuzou.myapplication.entity;\n\n/**\n * Created by AAA on 2015/6/16.\n */\npublic class BaseData {\n\n    private int dataId;\n    private String name;\n\n    public BaseData() {\n\n    }\n\n    public BaseData(int id, String name) {\n        this.dataId = id;\n        this.name = name;\n    }\n\n    public int getDataId() {\n        return dataId;\n    }\n\n    public void setDataId(int dataId) {\n        this.dataId = dataId;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/entity/GongZhong.java",
    "content": "package com.haibuzou.myapplication.entity;\n\nimport java.util.List;\n\n/**\n * Created by AAA on 2015/6/16.\n */\npublic class GongZhong extends BaseData {\n\n    public GongZhong(int id, String name) {\n        super(id, name);\n    }\n\n    private List<BaseData> jobtype;\n\n    public List<BaseData> getJobtype() {\n        return jobtype;\n    }\n\n    public void setJobtype(List<BaseData> jobtype) {\n        this.jobtype = jobtype;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/entity/ZhaoPin.java",
    "content": "package com.haibuzou.myapplication.entity;\n\nimport java.util.List;\n\n/**\n * Created by Administrator on 2015/6/16.\n */\npublic class ZhaoPin extends BaseData {\n\n    public ZhaoPin(int id, String name) {\n        super(id, name);\n    }\n\n    private List<GongZhong> jobtype;\n\n    public List<GongZhong> getJobtype() {\n        return jobtype;\n    }\n\n    public void setJobtype(List<GongZhong> jobtype) {\n        this.jobtype = jobtype;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/view/CurrenPositionView.java",
    "content": "package com.haibuzou.myapplication.view;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.LinearLayout;\nimport android.widget.TableLayout;\nimport android.widget.TableRow;\nimport android.widget.TextView;\n\nimport com.haibuzou.myapplication.MainActivity;\nimport com.haibuzou.myapplication.R;\nimport com.haibuzou.myapplication.entity.ZhaoPin;\n\n\npublic class CurrenPositionView extends LinearLayout {\n    //每行item个数\n    private static final int ROW_NUM = 3;\n    private TextView titleView;\n    private ZhaoPin data;\n    private TableLayout tableLayout;\n    private LayoutInflater layoutInflater;\n    private int viewId;\n\n    public CurrenPositionView(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n    }\n\n    public CurrenPositionView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public CurrenPositionView(Context context) {\n        super(context);\n    }\n\n    public ZhaoPin getData() {\n        return data;\n    }\n\n    public void setData(ZhaoPin data) {\n        this.data = data;\n    }\n\n    private void initView() {\n        layoutInflater = LayoutInflater.from(getContext());\n        View rootView = layoutInflater.inflate(R.layout.pulldown_view, this);\n        titleView = (TextView) rootView.findViewById(R.id.job_name_text);\n        tableLayout = (TableLayout) rootView.findViewById(R.id.job_name_table);\n        tableLayout.setStretchAllColumns(true);\n        setTitleStr(data.getName());\n        //初始化表格数据\n        int h = data.getJobtype().size() / ROW_NUM;\n        int len = data.getJobtype().size() % ROW_NUM;\n        int location = 0;\n        if (len != 0)\n            h += 1;\n        for (int n = 1; n <= h; n++) {\n            TableRow row = new TableRow(getContext());\n            int length = n == h ? len : ROW_NUM;\n            for (int m = 0; m < length; m++) {\n                MyTextView mview = (MyTextView) layoutInflater.inflate(R.layout.table_row_item, null);\n                mview.setText(data.getJobtype().get(location).getName());\n                mview.setTag(\"\" + viewId + location);\n                mview.setOnClickListener(((MainActivity) getContext()).new OnItemClick(data, location, n, tableLayout, mview));\n                row.addView(mview);\n                location++;\n            }\n            // 每一列 tablerow 增加一个 下拉的layout\n            View view = layoutInflater.inflate(R.layout.expand_item, null);\n            view.setTag(n);\n            view.setVisibility(View.GONE);\n            tableLayout.addView(row);\n            tableLayout.addView(view);\n        }\n    }\n\n    public void init() {\n        initView();\n    }\n\n    public void setTitleStr(CharSequence text) {\n        titleView.setText(text);\n    }\n\n    public int getViewId() {\n        return viewId;\n    }\n\n    public void setViewId(int viewId) {\n        this.viewId = viewId;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/view/ItemTextView.java",
    "content": "package com.haibuzou.myapplication.view;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.util.AttributeSet;\nimport android.widget.TextView;\n\n/**\n * Created by Administrator on 2015/6/17.\n */\npublic class ItemTextView extends TextView {\n\n    private final Paint paint;\n    private int mwidth;\n    private int mheight;\n\n    public ItemTextView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        paint = new Paint();\n        paint.setColor(Color.BLACK);\n        paint.setStyle(Paint.Style.STROKE);\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        canvas.drawLine(0, mheight - 1, mwidth - 1, mheight - 1, paint);\n        canvas.drawLine(mwidth - 1, mheight - 1, mwidth - 1, 0, paint);\n        super.onDraw(canvas);\n    }\n\n    @Override\n    protected void onSizeChanged(int w, int h, int oldw, int oldh) {\n        super.onSizeChanged(w, h, oldw, oldh);\n        mwidth = w;\n        mheight = h;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/haibuzou/myapplication/view/MyTextView.java",
    "content": "package com.haibuzou.myapplication.view;\n\nimport android.content.Context;\nimport android.widget.TextView;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.Paint.Align;\nimport android.graphics.Path;\nimport android.util.AttributeSet;\nimport android.util.TypedValue;\n\n/**\n * Created by AAA on 2015/6/16.\n */\npublic class MyTextView extends TextView {\n\n\n    private Paint txtpaint;\n    private Paint linepaint;\n    private Paint tripaint;\n    private Path path;\n    private Boolean isDraw;\n    private float textSize;\n\n    public MyTextView(Context context) {\n        super(context);\n    }\n\n    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        init(context, attrs);\n    }\n\n    public MyTextView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        init(context, attrs);\n    }\n\n    private void init(Context context, AttributeSet attrs) {\n\n        txtpaint = new Paint();\n        path = new Path();\n        txtpaint.setColor(Color.BLACK);\n        txtpaint.setTextSize(textSize);\n        txtpaint.setTextAlign(Align.LEFT);\n\n        linepaint = new Paint();\n        linepaint.setColor(Color.LTGRAY);\n        linepaint.setStyle(Paint.Style.STROKE);\n\n        tripaint = new Paint();\n        tripaint.setColor(Color.GRAY);\n\n        isDraw = false;\n\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        canvas.drawRect(0, 0, getWidth(), getHeight(), linepaint);\n        int len = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,\n                7, getResources().getDisplayMetrics());\n        if (isDraw) {\n            path.moveTo(getWidth() / 2, getHeight() - len);\n            path.lineTo(getWidth() / 2 - len, getHeight());\n            path.lineTo(getWidth() / 2 + len, getHeight());\n            canvas.drawPath(path, tripaint);\n        }\n        super.onDraw(canvas);\n    }\n\n    public void isDraw(boolean isDraw) {\n        this.isDraw = isDraw;\n        postInvalidate();\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/main_click_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:state_focused=\"true\" android:drawable=\"@color/click\" />\n    <item android:state_pressed=\"true\" android:drawable=\"@color/click\" />\n    <item android:drawable=\"@color/white\" />\n</selector> \n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#f0eff4\"\n    android:orientation=\"vertical\">\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:scrollbars=\"none\">\n\n        <LinearLayout\n            android:id=\"@+id/zp_curr_potion_linear\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"16dp\"\n            android:layout_marginRight=\"16dp\"\n            android:layout_marginTop=\"16dp\"\n            android:orientation=\"vertical\" />\n    </ScrollView>\n</LinearLayout>    \n"
  },
  {
    "path": "app/src/main/res/layout/expand_grid_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.haibuzou.myapplication.view.ItemTextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:id=\"@+id/expand_grid_txt\"\n    android:textSize=\"13sp\"\n    android:textColor=\"#ffffff\"\n    android:gravity=\"center\"\n    android:background=\"#606469\"\n    android:layout_height=\"42dp\"></com.haibuzou.myapplication.view.ItemTextView>\n"
  },
  {
    "path": "app/src/main/res/layout/expand_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#ffffff\"\n    android:visibility=\"gone\">\n\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/expand_item\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <LinearLayout\n        android:id=\"@+id/circle_layout\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@id/expand_item\"\n        android:layout_centerHorizontal=\"true\"\n        android:orientation=\"horizontal\"\n        android:paddingBottom=\"6dp\"\n        android:paddingTop=\"6dp\"\n        android:visibility=\"gone\"></LinearLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/pulldown_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"10dp\"\n        android:layout_marginLeft=\"2dp\"\n        android:orientation=\"horizontal\">\n\n        <ImageView\n            android:layout_width=\"8dp\"\n            android:layout_height=\"8dp\"\n            android:layout_marginTop=\"6dp\"\n            android:src=\"@mipmap/square\" />\n\n        <TextView\n            android:id=\"@+id/job_name_text\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"5dp\"\n            android:textColor=\"#333333\"\n            android:textSize=\"16sp\" />\n    </LinearLayout>\n\n    <TableLayout\n        android:id=\"@+id/job_name_table\"\n        android:layout_width=\"match_parent\"\n        android:background=\"#f0eff4\"\n        android:layout_height=\"wrap_content\"></TableLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/table_row_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.haibuzou.myapplication.view.MyTextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:android_custom=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"50dp\"\n    android:background=\"@drawable/main_click_selector\"\n    android:paddingBottom=\"14dp\"\n    android:paddingLeft=\"14dp\"\n    android:paddingTop=\"14dp\"\n    android:textSize=\"16sp\"></com.haibuzou.myapplication.view.MyTextView>"
  },
  {
    "path": "app/src/main/res/layout/viewpager.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<GridView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:id=\"@+id/expand_grid\"\n    android:numColumns=\"3\"\n    android:listSelector=\"@null\"\n    android:scrollbars=\"none\"\n    android:background=\"#606469\"\n    android:layout_height=\"match_parent\"></GridView>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\".MainActivity\">\n    <item\n        android:id=\"@+id/action_settings\"\n        android:title=\"@string/action_settings\"\n        android:orderInCategory=\"100\"\n        app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/raw/zhaopin.json",
    "content": "[\n  {\n    \"dataId\": \"120000\",\n    \"name\": \"技术/制造岗位\",\n    \"jobtype\": [\n      {\n        \"dataId\": \"120100\",\n        \"name\": \"技工/普工\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120101\",\n            \"name\": \"普工/操作工\"\n          },\n          {\n            \"dataId\": \"120102\",\n            \"name\": \"车床工\"\n          },\n          {\n            \"dataId\": \"120103\",\n            \"name\": \"铣刨\"\n          },\n          {\n            \"dataId\": \"120104\",\n            \"name\": \"钣铆冲铸\"\n          },\n          {\n            \"dataId\": \"120105\",\n            \"name\": \"钳工\"\n          },\n          {\n            \"dataId\": \"120106\",\n            \"name\": \"焊工\"\n          },\n          {\n            \"dataId\": \"120107\",\n            \"name\": \"磨床工\"\n          },\n          {\n            \"dataId\": \"120108\",\n            \"name\": \"火花机工\"\n          },\n          {\n            \"dataId\": \"120109\",\n            \"name\": \"裁剪车\"\n          },\n          {\n            \"dataId\": \"120110\",\n            \"name\": \"缝熨烫\"\n          },\n          {\n            \"dataId\": \"120111\",\n            \"name\": \"打磨/抛光\"\n          },\n          {\n            \"dataId\": \"120112\",\n            \"name\": \"空调/电梯工\"\n          },\n          {\n            \"dataId\": \"120113\",\n            \"name\": \"汽摩维修员\"\n          },\n          {\n            \"dataId\": \"120114\",\n            \"name\": \"水/木/油漆工\"\n          },\n          {\n            \"dataId\": \"120115\",\n            \"name\": \"电工\"\n          },\n          {\n            \"dataId\": \"120116\",\n            \"name\": \"锅炉工\"\n          },\n          {\n            \"dataId\": \"120117\",\n            \"name\": \"锁具修理工\"\n          },\n          {\n            \"dataId\": \"120118\",\n            \"name\": \"叉车工\"\n          },\n          {\n            \"dataId\": \"120119\",\n            \"name\": \"模具工\"\n          },\n          {\n            \"dataId\": \"120120\",\n            \"name\": \"手机维修\"\n          },\n          {\n            \"dataId\": \"120121\",\n            \"name\": \"包装工\"\n          },\n          {\n            \"dataId\": \"120122\",\n            \"name\": \"水泥工\"\n          },\n          {\n            \"dataId\": \"120123\",\n            \"name\": \"钢筋工\"\n          },\n          {\n            \"dataId\": \"120124\",\n            \"name\": \"管道工\"\n          },\n          {\n            \"dataId\": \"120125\",\n            \"name\": \"瓦工\"\n          },\n          {\n            \"dataId\": \"120126\",\n            \"name\": \"组装工\"\n          },\n          {\n            \"dataId\": \"120127\",\n            \"name\": \"样衣工\"\n          },\n          {\n            \"dataId\": \"120128\",\n            \"name\": \"染工\"\n          },\n          {\n            \"dataId\": \"120129\",\n            \"name\": \"纺织工\"\n          },\n          {\n            \"dataId\": \"120130\",\n            \"name\": \"印花工\"\n          },\n          {\n            \"dataId\": \"120131\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120200\",\n        \"name\": \"生产/研发\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120201\",\n            \"name\": \"生产文员 \"\n          },\n          {\n            \"dataId\": \"120202\",\n            \"name\": \"组长/拉长 \"\n          },\n          {\n            \"dataId\": \"120203\",\n            \"name\": \"物控/物料员\"\n          },\n          {\n            \"dataId\": \"120204\",\n            \"name\": \"储备干部\"\n          },\n          {\n            \"dataId\": \"120205\",\n            \"name\": \"质量管理\"\n          },\n          {\n            \"dataId\": \"120206\",\n            \"name\": \"生产组长\"\n          },\n          {\n            \"dataId\": \"120207\",\n            \"name\": \"主任\"\n          },\n          {\n            \"dataId\": \"120208\",\n            \"name\": \"高级工程师\"\n          },\n          {\n            \"dataId\": \"120209\",\n            \"name\": \"设备管理\"\n          },\n          {\n            \"dataId\": \"120210\",\n            \"name\": \"工艺设计\"\n          },\n          {\n            \"dataId\": \"120211\",\n            \"name\": \"生产计划\"\n          },\n          {\n            \"dataId\": \"120212\",\n            \"name\": \"化验/检验\"\n          },\n          {\n            \"dataId\": \"120213\",\n            \"name\": \"厂长/副厂长\"\n          },\n          {\n            \"dataId\": \"120214\",\n            \"name\": \"生产总监\"\n          },\n          {\n            \"dataId\": \"120215\",\n            \"name\": \"维修工程师\"\n          },\n          {\n            \"dataId\": \"120216\",\n            \"name\": \"工业工程师\"\n          },\n          {\n            \"dataId\": \"120217\",\n            \"name\": \"材料工程师\"\n          },\n          {\n            \"dataId\": \"120218\",\n            \"name\": \"技术工程师\"\n          },\n          {\n            \"dataId\": \"120219\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120300\",\n        \"name\": \"机械/仪表\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120301\",\n            \"name\": \"机械工程\"\n          },\n          {\n            \"dataId\": \"120302\",\n            \"name\": \"仪器仪表\"\n          },\n          {\n            \"dataId\": \"120303\",\n            \"name\": \"机电\"\n          },\n          {\n            \"dataId\": \"120304\",\n            \"name\": \"版图设计\"\n          },\n          {\n            \"dataId\": \"120305\",\n            \"name\": \"研发工程师\"\n          },\n          {\n            \"dataId\": \"120306\",\n            \"name\": \"机械测试\"\n          },\n          {\n            \"dataId\": \"120307\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120400\",\n        \"name\": \"建筑/装修\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120401\",\n            \"name\": \"土木工程\"\n          },\n          {\n            \"dataId\": \"120402\",\n            \"name\": \"工程监理\"\n          },\n          {\n            \"dataId\": \"120403\",\n            \"name\": \"项目管理\"\n          },\n          {\n            \"dataId\": \"120404\",\n            \"name\": \"总工程师\"\n          },\n          {\n            \"dataId\": \"120405\",\n            \"name\": \"造价师\"\n          },\n          {\n            \"dataId\": \"120406\",\n            \"name\": \"幕墙工程师\"\n          },\n          {\n            \"dataId\": \"120407\",\n            \"name\": \"安防工程师\"\n          },\n          {\n            \"dataId\": \"120408\",\n            \"name\": \"安全管理\"\n          },\n          {\n            \"dataId\": \"120409\",\n            \"name\": \"道路桥梁\"\n          },\n          {\n            \"dataId\": \"120410\",\n            \"name\": \"给排水暖通\"\n          },\n          {\n            \"dataId\": \"120411\",\n            \"name\": \"测绘员\"\n          },\n          {\n            \"dataId\": \"120412\",\n            \"name\": \"园林设计\"\n          },\n          {\n            \"dataId\": \"120413\",\n            \"name\": \"资料员\"\n          },\n          {\n            \"dataId\": \"120414\",\n            \"name\": \"综合布线\"\n          },\n          {\n            \"dataId\": \"120415\",\n            \"name\": \"市政工程师\"\n          },\n          {\n            \"dataId\": \"120416\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120500\",\n        \"name\": \"电子/电气\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120501\",\n            \"name\": \"电子电气\"\n          },\n          {\n            \"dataId\": \"120502\",\n            \"name\": \"自动化\"\n          },\n          {\n            \"dataId\": \"120503\",\n            \"name\": \"电路工程师\"\n          },\n          {\n            \"dataId\": \"120504\",\n            \"name\": \"无线电\"\n          },\n          {\n            \"dataId\": \"120505\",\n            \"name\": \"电气测试\"\n          },\n          {\n            \"dataId\": \"120506\",\n            \"name\": \"产品工艺\"\n          },\n          {\n            \"dataId\": \"120507\",\n            \"name\": \"音频/视频\"\n          },\n          {\n            \"dataId\": \"120508\",\n            \"name\": \"灯光照明\"\n          },\n          {\n            \"dataId\": \"120509\",\n            \"name\": \"研发工程师\"\n          },\n          {\n            \"dataId\": \"120510\",\n            \"name\": \"电子维修\"\n          },\n          {\n            \"dataId\": \"120511\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120600\",\n        \"name\": \"质控/安防\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120601\",\n            \"name\": \"质量管理\"\n          },\n          {\n            \"dataId\": \"120602\",\n            \"name\": \"安全消防\"\n          },\n          {\n            \"dataId\": \"120603\",\n            \"name\": \"质检\"\n          },\n          {\n            \"dataId\": \"120604\",\n            \"name\": \"安防测试\"\n          },\n          {\n            \"dataId\": \"120605\",\n            \"name\": \"认证工程师\"\n          },\n          {\n            \"dataId\": \"120606\",\n            \"name\": \"安防管理\"\n          },\n          {\n            \"dataId\": \"120607\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120700\",\n        \"name\": \"制药/生工\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120701\",\n            \"name\": \"临床研究\"\n          },\n          {\n            \"dataId\": \"120702\",\n            \"name\": \"医药研发\"\n          },\n          {\n            \"dataId\": \"120703\",\n            \"name\": \"生工\"\n          },\n          {\n            \"dataId\": \"120704\",\n            \"name\": \"医疗器械\"\n          },\n          {\n            \"dataId\": \"120705\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120800\",\n        \"name\": \"服装/食品\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120801\",\n            \"name\": \"服装设计师\"\n          },\n          {\n            \"dataId\": \"120802\",\n            \"name\": \"打样制版\"\n          },\n          {\n            \"dataId\": \"120803\",\n            \"name\": \"样衣工\"\n          },\n          {\n            \"dataId\": \"120804\",\n            \"name\": \"生产管理\"\n          },\n          {\n            \"dataId\": \"120805\",\n            \"name\": \"食品研发\"\n          },\n          {\n            \"dataId\": \"120806\",\n            \"name\": \"样板出格师\"\n          },\n          {\n            \"dataId\": \"120807\",\n            \"name\": \"电脑放码员\"\n          },\n          {\n            \"dataId\": \"120808\",\n            \"name\": \"纸样师\"\n          },\n          {\n            \"dataId\": \"120809\",\n            \"name\": \"纺织品设计\"\n          },\n          {\n            \"dataId\": \"120810\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"120900\",\n        \"name\": \"农林牧渔\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"120901\",\n            \"name\": \"养殖人员\"\n          },\n          {\n            \"dataId\": \"120902\",\n            \"name\": \"饲料业务\"\n          },\n          {\n            \"dataId\": \"120903\",\n            \"name\": \"农艺师\"\n          },\n          {\n            \"dataId\": \"120904\",\n            \"name\": \"畜牧师\"\n          },\n          {\n            \"dataId\": \"120905\",\n            \"name\": \"场长\"\n          },\n          {\n            \"dataId\": \"120906\",\n            \"name\": \"养殖部主管\"\n          },\n          {\n            \"dataId\": \"120907\",\n            \"name\": \"饲料研发\"\n          },\n          {\n            \"dataId\": \"120908\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"121100\",\n        \"name\": \"环境保护\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"121101\",\n            \"name\": \"污水处理\"\n          },\n          {\n            \"dataId\": \"121102\",\n            \"name\": \"环保检测\"\n          },\n          {\n            \"dataId\": \"121103\",\n            \"name\": \"工程师\"\n          },\n          {\n            \"dataId\": \"121104\",\n            \"name\": \"环境管理\"\n          },\n          {\n            \"dataId\": \"121105\",\n            \"name\": \"环保技术\"\n          },\n          {\n            \"dataId\": \"121106\",\n            \"name\": \"EHS管理\"\n          },\n          {\n            \"dataId\": \"121107\",\n            \"name\": \"环保工程师\"\n          },\n          {\n            \"dataId\": \"121108\",\n            \"name\": \"水质检测员\"\n          },\n          {\n            \"dataId\": \"121109\",\n            \"name\": \"环境绿化\"\n          },\n          {\n            \"dataId\": \"121110\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"121000\",\n        \"name\": \"汽车\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"121001\",\n            \"name\": \"汽车修理\"\n          },\n          {\n            \"dataId\": \"121002\",\n            \"name\": \"汽车美容\"\n          },\n          {\n            \"dataId\": \"121003\",\n            \"name\": \"洗车工\"\n          },\n          {\n            \"dataId\": \"121004\",\n            \"name\": \"轮胎工\"\n          },\n          {\n            \"dataId\": \"121005\",\n            \"name\": \"汽车设计\"\n          },\n          {\n            \"dataId\": \"121006\",\n            \"name\": \"装配工艺\"\n          },\n          {\n            \"dataId\": \"121007\",\n            \"name\": \"机械工程师\"\n          },\n          {\n            \"dataId\": \"121008\",\n            \"name\": \"电子工程师\"\n          },\n          {\n            \"dataId\": \"121009\",\n            \"name\": \"4S店管理\"\n          },\n          {\n            \"dataId\": \"121010\",\n            \"name\": \"汽车检验\"\n          },\n          {\n            \"dataId\": \"121011\",\n            \"name\": \"二手车评估\"\n          },\n          {\n            \"dataId\": \"121012\",\n            \"name\": \"总装工程师\"\n          },\n          {\n            \"dataId\": \"121013\",\n            \"name\": \"安全性能\"\n          },\n          {\n            \"dataId\": \"121014\",\n            \"name\": \"理赔专员\"\n          },\n          {\n            \"dataId\": \"121015\",\n            \"name\": \"停车管理员\"\n          },\n          {\n            \"dataId\": \"121016\",\n            \"name\": \"加油站工人\"\n          },\n          {\n            \"dataId\": \"121017\",\n            \"name\": \"其他\"\n          }\n        ]\n      }\n    ]\n  },\n  {\n    \"dataId\": \"110000\",\n    \"name\": \"生活服务岗位\",\n    \"jobtype\": [\n      {\n        \"dataId\": \"110100\",\n        \"name\": \"餐饮服务\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110101\",\n            \"name\": \"厨师\"\n          },\n          {\n            \"dataId\": \"110102\",\n            \"name\": \"面点师\"\n          },\n          {\n            \"dataId\": \"110103\",\n            \"name\": \"服务员\"\n          },\n          {\n            \"dataId\": \"110104\",\n            \"name\": \"传菜员\"\n          },\n          {\n            \"dataId\": \"110105\",\n            \"name\": \"配菜打荷\"\n          },\n          {\n            \"dataId\": \"110106\",\n            \"name\": \"洗碗工\"\n          },\n          {\n            \"dataId\": \"110107\",\n            \"name\": \"后厨\"\n          },\n          {\n            \"dataId\": \"110108\",\n            \"name\": \"茶艺师\"\n          },\n          {\n            \"dataId\": \"110109\",\n            \"name\": \"咖啡师\"\n          },\n          {\n            \"dataId\": \"110110\",\n            \"name\": \"迎宾\"\n          },\n          {\n            \"dataId\": \"110111\",\n            \"name\": \"大堂经理\"\n          },\n          {\n            \"dataId\": \"110112\",\n            \"name\": \"预订员\"\n          },\n          {\n            \"dataId\": \"110113\",\n            \"name\": \"送餐员\"\n          },\n          {\n            \"dataId\": \"110114\",\n            \"name\": \"餐饮管理\"\n          },\n          {\n            \"dataId\": \"110115\",\n            \"name\": \"学徒\"\n          },\n          {\n            \"dataId\": \"110116\",\n            \"name\": \"杂工\"\n          },\n          {\n            \"dataId\": \"110117\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110200\",\n        \"name\": \"酒店/旅游\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110201\",\n            \"name\": \"酒店前台\"\n          },\n          {\n            \"dataId\": \"110202\",\n            \"name\": \"客房服务员\"\n          },\n          {\n            \"dataId\": \"110203\",\n            \"name\": \"楼面经理\"\n          },\n          {\n            \"dataId\": \"110204\",\n            \"name\": \"行李员\"\n          },\n          {\n            \"dataId\": \"110205\",\n            \"name\": \"救生员\"\n          },\n          {\n            \"dataId\": \"110206\",\n            \"name\": \"酒店管理\"\n          },\n          {\n            \"dataId\": \"110207\",\n            \"name\": \"订票员\"\n          },\n          {\n            \"dataId\": \"110208\",\n            \"name\": \"导游\"\n          },\n          {\n            \"dataId\": \"110209\",\n            \"name\": \"计调\"\n          },\n          {\n            \"dataId\": \"110210\",\n            \"name\": \"签证专员\"\n          },\n          {\n            \"dataId\": \"110211\",\n            \"name\": \"旅游顾问\"\n          },\n          {\n            \"dataId\": \"110212\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110300\",\n        \"name\": \"超市/零售\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110301\",\n            \"name\": \"促销导购\"\n          },\n          {\n            \"dataId\": \"110302\",\n            \"name\": \"营业员\"\n          },\n          {\n            \"dataId\": \"110303\",\n            \"name\": \"收银员\"\n          },\n          {\n            \"dataId\": \"110304\",\n            \"name\": \"理货员\"\n          },\n          {\n            \"dataId\": \"110305\",\n            \"name\": \"防损员\"\n          },\n          {\n            \"dataId\": \"110306\",\n            \"name\": \"店长\"\n          },\n          {\n            \"dataId\": \"110307\",\n            \"name\": \"招商经理\"\n          },\n          {\n            \"dataId\": \"110308\",\n            \"name\": \"奢侈品业务\"\n          },\n          {\n            \"dataId\": \"110309\",\n            \"name\": \"品类管理\"\n          },\n          {\n            \"dataId\": \"110310\",\n            \"name\": \"食品加工\"\n          },\n          {\n            \"dataId\": \"110311\",\n            \"name\": \"督导\"\n          },\n          {\n            \"dataId\": \"110312\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110400\",\n        \"name\": \"美容/美发\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110401\",\n            \"name\": \"发型师\"\n          },\n          {\n            \"dataId\": \"110402\",\n            \"name\": \"美容师\"\n          },\n          {\n            \"dataId\": \"110403\",\n            \"name\": \"化妆师\"\n          },\n          {\n            \"dataId\": \"110404\",\n            \"name\": \"美发助理\"\n          },\n          {\n            \"dataId\": \"110405\",\n            \"name\": \"洗头工\"\n          },\n          {\n            \"dataId\": \"110406\",\n            \"name\": \"美容助理\"\n          },\n          {\n            \"dataId\": \"110407\",\n            \"name\": \"美甲师\"\n          },\n          {\n            \"dataId\": \"110408\",\n            \"name\": \"美体师\"\n          },\n          {\n            \"dataId\": \"110409\",\n            \"name\": \"美容导师\"\n          },\n          {\n            \"dataId\": \"110410\",\n            \"name\": \"美容店长\"\n          },\n          {\n            \"dataId\": \"110411\",\n            \"name\": \"美容顾问\"\n          },\n          {\n            \"dataId\": \"110412\",\n            \"name\": \"彩妆培训师\"\n          },\n          {\n            \"dataId\": \"110413\",\n            \"name\": \"宠物美容\"\n          },\n          {\n            \"dataId\": \"110414\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110500\",\n        \"name\": \"保健/按摩\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110501\",\n            \"name\": \"按摩师\"\n          },\n          {\n            \"dataId\": \"110502\",\n            \"name\": \"针灸推拿\"\n          },\n          {\n            \"dataId\": \"110503\",\n            \"name\": \"足疗师\"\n          },\n          {\n            \"dataId\": \"110504\",\n            \"name\": \"搓澡工\"\n          },\n          {\n            \"dataId\": \"110505\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110600\",\n        \"name\": \"运动/健身\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110601\",\n            \"name\": \"健身教练\"\n          },\n          {\n            \"dataId\": \"110602\",\n            \"name\": \"瑜伽老师\"\n          },\n          {\n            \"dataId\": \"110603\",\n            \"name\": \"舞蹈师\"\n          },\n          {\n            \"dataId\": \"110604\",\n            \"name\": \"游泳教练\"\n          },\n          {\n            \"dataId\": \"110605\",\n            \"name\": \"台球教练\"\n          },\n          {\n            \"dataId\": \"110606\",\n            \"name\": \"高尔夫助理\"\n          },\n          {\n            \"dataId\": \"110607\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110700\",\n        \"name\": \"淘宝招聘\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110701\",\n            \"name\": \"淘宝客服\"\n          },\n          {\n            \"dataId\": \"110702\",\n            \"name\": \"淘宝美工\"\n          },\n          {\n            \"dataId\": \"110703\",\n            \"name\": \"淘宝店长\"\n          },\n          {\n            \"dataId\": \"110704\",\n            \"name\": \"店铺编辑\"\n          },\n          {\n            \"dataId\": \"110705\",\n            \"name\": \"店铺推广\"\n          },\n          {\n            \"dataId\": \"110706\",\n            \"name\": \"活动策划\"\n          },\n          {\n            \"dataId\": \"110707\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110800\",\n        \"name\": \"家政/安保\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110801\",\n            \"name\": \"保洁\"\n          },\n          {\n            \"dataId\": \"110802\",\n            \"name\": \"保姆\"\n          },\n          {\n            \"dataId\": \"110803\",\n            \"name\": \"保安\"\n          },\n          {\n            \"dataId\": \"110804\",\n            \"name\": \"月嫂\"\n          },\n          {\n            \"dataId\": \"110805\",\n            \"name\": \"育婴师\"\n          },\n          {\n            \"dataId\": \"110806\",\n            \"name\": \"洗衣工\"\n          },\n          {\n            \"dataId\": \"110807\",\n            \"name\": \"钟点工\"\n          },\n          {\n            \"dataId\": \"110808\",\n            \"name\": \"送水工\"\n          },\n          {\n            \"dataId\": \"110809\",\n            \"name\": \"护工\"\n          },\n          {\n            \"dataId\": \"110810\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"110900\",\n        \"name\": \"物业管理\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"110901\",\n            \"name\": \"物业维修\"\n          },\n          {\n            \"dataId\": \"110902\",\n            \"name\": \"物业经理\"\n          },\n          {\n            \"dataId\": \"110903\",\n            \"name\": \"物业管理员\"\n          },\n          {\n            \"dataId\": \"110904\",\n            \"name\": \"合同管理\"\n          },\n          {\n            \"dataId\": \"110905\",\n            \"name\": \"招商经理\"\n          },\n          {\n            \"dataId\": \"110906\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"111000\",\n        \"name\": \"教育/培训\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"111001\",\n            \"name\": \"教师/助教\"\n          },\n          {\n            \"dataId\": \"111002\",\n            \"name\": \"家教\"\n          },\n          {\n            \"dataId\": \"111003\",\n            \"name\": \"培训师\"\n          },\n          {\n            \"dataId\": \"111004\",\n            \"name\": \"幼教\"\n          },\n          {\n            \"dataId\": \"111005\",\n            \"name\": \"培训策划\"\n          },\n          {\n            \"dataId\": \"111006\",\n            \"name\": \"培训助理\"\n          },\n          {\n            \"dataId\": \"111007\",\n            \"name\": \"教务管理\"\n          },\n          {\n            \"dataId\": \"111008\",\n            \"name\": \"教具开发\"\n          },\n          {\n            \"dataId\": \"111009\",\n            \"name\": \"学术研究\"\n          },\n          {\n            \"dataId\": \"111010\",\n            \"name\": \"课程顾问\"\n          },\n          {\n            \"dataId\": \"111011\",\n            \"name\": \"校长\"\n          },\n          {\n            \"dataId\": \"111012\",\n            \"name\": \"拓展训练师\"\n          },\n          {\n            \"dataId\": \"111013\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"111100\",\n        \"name\": \"娱乐/影视\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"111101\",\n            \"name\": \"礼仪\"\n          },\n          {\n            \"dataId\": \"111102\",\n            \"name\": \"调酒师\"\n          },\n          {\n            \"dataId\": \"111103\",\n            \"name\": \"摄影师\"\n          },\n          {\n            \"dataId\": \"111104\",\n            \"name\": \"酒吧服务员\"\n          },\n          {\n            \"dataId\": \"111105\",\n            \"name\": \"歌厅服务员\"\n          },\n          {\n            \"dataId\": \"111106\",\n            \"name\": \"主持人\"\n          },\n          {\n            \"dataId\": \"111107\",\n            \"name\": \"音效师\"\n          },\n          {\n            \"dataId\": \"111108\",\n            \"name\": \"后期制作\"\n          },\n          {\n            \"dataId\": \"111109\",\n            \"name\": \"配音员\"\n          },\n          {\n            \"dataId\": \"111110\",\n            \"name\": \"放映员\"\n          },\n          {\n            \"dataId\": \"111111\",\n            \"name\": \"灯光师\"\n          },\n          {\n            \"dataId\": \"111112\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"111200\",\n        \"name\": \"医疗/药剂\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"111201\",\n            \"name\": \"医生\"\n          },\n          {\n            \"dataId\": \"111202\",\n            \"name\": \"护士\"\n          },\n          {\n            \"dataId\": \"111203\",\n            \"name\": \"药剂师\"\n          },\n          {\n            \"dataId\": \"111204\",\n            \"name\": \"保健医生\"\n          },\n          {\n            \"dataId\": \"111205\",\n            \"name\": \"心理医生\"\n          },\n          {\n            \"dataId\": \"111206\",\n            \"name\": \"导医\"\n          },\n          {\n            \"dataId\": \"111207\",\n            \"name\": \"护士长\"\n          },\n          {\n            \"dataId\": \"111208\",\n            \"name\": \"理疗师\"\n          },\n          {\n            \"dataId\": \"111209\",\n            \"name\": \"医药质检\"\n          },\n          {\n            \"dataId\": \"111210\",\n            \"name\": \"医疗管理\"\n          },\n          {\n            \"dataId\": \"111211\",\n            \"name\": \"美容整形师\"\n          },\n          {\n            \"dataId\": \"111212\",\n            \"name\": \"验光师\"\n          },\n          {\n            \"dataId\": \"111213\",\n            \"name\": \"营养师\"\n          },\n          {\n            \"dataId\": \"111214\",\n            \"name\": \"宠物医生\"\n          },\n          {\n            \"dataId\": \"111215\",\n            \"name\": \"其他\"\n          }\n        ]\n      }\n    ]\n  },\n  {\n    \"dataId\": \"100000\",\n    \"name\": \"商务服务岗位\",\n    \"jobtype\": [\n      {\n        \"dataId\": \"100100\",\n        \"name\": \"销售\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100101\",\n            \"name\": \"销售代表\"\n          },\n          {\n            \"dataId\": \"100102\",\n            \"name\": \"电话销售\"\n          },\n          {\n            \"dataId\": \"100103\",\n            \"name\": \"销售经理\"\n          },\n          {\n            \"dataId\": \"100104\",\n            \"name\": \"销售助理\"\n          },\n          {\n            \"dataId\": \"100105\",\n            \"name\": \"销售总监\"\n          },\n          {\n            \"dataId\": \"100106\",\n            \"name\": \"销售支持\"\n          },\n          {\n            \"dataId\": \"100107\",\n            \"name\": \"汽车销售\"\n          },\n          {\n            \"dataId\": \"100108\",\n            \"name\": \"医药代表\"\n          },\n          {\n            \"dataId\": \"100109\",\n            \"name\": \"器械销售\"\n          },\n          {\n            \"dataId\": \"100110\",\n            \"name\": \"网络销售\"\n          },\n          {\n            \"dataId\": \"100111\",\n            \"name\": \"团购销售\"\n          },\n          {\n            \"dataId\": \"100112\",\n            \"name\": \"区域销售\"\n          },\n          {\n            \"dataId\": \"100113\",\n            \"name\": \"渠道专员\"\n          },\n          {\n            \"dataId\": \"100114\",\n            \"name\": \"渠道经理\"\n          },\n          {\n            \"dataId\": \"100115\",\n            \"name\": \"客户经理\"\n          },\n          {\n            \"dataId\": \"100116\",\n            \"name\": \"大客户经理\"\n          },\n          {\n            \"dataId\": \"100117\",\n            \"name\": \"会籍顾问\"\n          },\n          {\n            \"dataId\": \"100118\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100200\",\n        \"name\": \"客服\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100201\",\n            \"name\": \"客服专员\"\n          },\n          {\n            \"dataId\": \"100202\",\n            \"name\": \"电话客服\"\n          },\n          {\n            \"dataId\": \"100203\",\n            \"name\": \"客服经理\"\n          },\n          {\n            \"dataId\": \"100204\",\n            \"name\": \"客服总监\"\n          },\n          {\n            \"dataId\": \"100205\",\n            \"name\": \"售后服务\"\n          },\n          {\n            \"dataId\": \"100206\",\n            \"name\": \"客户关系\"\n          },\n          {\n            \"dataId\": \"100207\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100300\",\n        \"name\": \"人事/行政\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100301\",\n            \"name\": \"文员\"\n          },\n          {\n            \"dataId\": \"100302\",\n            \"name\": \"前台\"\n          },\n          {\n            \"dataId\": \"100303\",\n            \"name\": \"秘书\"\n          },\n          {\n            \"dataId\": \"100304\",\n            \"name\": \"人事专员\"\n          },\n          {\n            \"dataId\": \"100305\",\n            \"name\": \"人事经理\"\n          },\n          {\n            \"dataId\": \"100306\",\n            \"name\": \"人事总监\"\n          },\n          {\n            \"dataId\": \"100307\",\n            \"name\": \"行政助理\"\n          },\n          {\n            \"dataId\": \"100308\",\n            \"name\": \"行政主管\"\n          },\n          {\n            \"dataId\": \"100309\",\n            \"name\": \"行政总监\"\n          },\n          {\n            \"dataId\": \"100310\",\n            \"name\": \"薪酬绩效\"\n          },\n          {\n            \"dataId\": \"100311\",\n            \"name\": \"招聘专员\"\n          },\n          {\n            \"dataId\": \"100312\",\n            \"name\": \"招聘经理\"\n          },\n          {\n            \"dataId\": \"100313\",\n            \"name\": \"猎头顾问\"\n          },\n          {\n            \"dataId\": \"100314\",\n            \"name\": \"培训专员\"\n          },\n          {\n            \"dataId\": \"100315\",\n            \"name\": \"培训经理\"\n          },\n          {\n            \"dataId\": \"100316\",\n            \"name\": \"后期管理\"\n          },\n          {\n            \"dataId\": \"100317\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100400\",\n        \"name\": \"司机\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100401\",\n            \"name\": \"商务司机\"\n          },\n          {\n            \"dataId\": \"100402\",\n            \"name\": \"货运司机\"\n          },\n          {\n            \"dataId\": \"100403\",\n            \"name\": \"客运司机\"\n          },\n          {\n            \"dataId\": \"100404\",\n            \"name\": \"出租车司机\"\n          },\n          {\n            \"dataId\": \"100405\",\n            \"name\": \"班车司机\"\n          },\n          {\n            \"dataId\": \"100406\",\n            \"name\": \"特种车司机\"\n          },\n          {\n            \"dataId\": \"100407\",\n            \"name\": \"驾校教练\"\n          },\n          {\n            \"dataId\": \"100408\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100500\",\n        \"name\": \"物流/仓储\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100501\",\n            \"name\": \"快递员\"\n          },\n          {\n            \"dataId\": \"100502\",\n            \"name\": \"仓库管理员\"\n          },\n          {\n            \"dataId\": \"100503\",\n            \"name\": \"搬运工\"\n          },\n          {\n            \"dataId\": \"100504\",\n            \"name\": \"物流专员\"\n          },\n          {\n            \"dataId\": \"100505\",\n            \"name\": \"物流经理\"\n          },\n          {\n            \"dataId\": \"100506\",\n            \"name\": \"物流总监\"\n          },\n          {\n            \"dataId\": \"100507\",\n            \"name\": \"调度员\"\n          },\n          {\n            \"dataId\": \"100508\",\n            \"name\": \"仓库经理\"\n          },\n          {\n            \"dataId\": \"100509\",\n            \"name\": \"供应链管理\"\n          },\n          {\n            \"dataId\": \"100510\",\n            \"name\": \"单证员\"\n          },\n          {\n            \"dataId\": \"100511\",\n            \"name\": \"国际货运\"\n          },\n          {\n            \"dataId\": \"100512\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100600\",\n        \"name\": \"贸易/采购\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100601\",\n            \"name\": \"外贸专员\"\n          },\n          {\n            \"dataId\": \"100602\",\n            \"name\": \"外贸经理\"\n          },\n          {\n            \"dataId\": \"100603\",\n            \"name\": \"采购员\"\n          },\n          {\n            \"dataId\": \"100604\",\n            \"name\": \"采购助理\"\n          },\n          {\n            \"dataId\": \"100605\",\n            \"name\": \"采购经理\"\n          },\n          {\n            \"dataId\": \"100606\",\n            \"name\": \"报关员\"\n          },\n          {\n            \"dataId\": \"100607\",\n            \"name\": \"商务专员\"\n          },\n          {\n            \"dataId\": \"100608\",\n            \"name\": \"买手\"\n          },\n          {\n            \"dataId\": \"100609\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100700\",\n        \"name\": \"翻译\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100701\",\n            \"name\": \"英语\"\n          },\n          {\n            \"dataId\": \"100702\",\n            \"name\": \"日语\"\n          },\n          {\n            \"dataId\": \"100703\",\n            \"name\": \"俄语\"\n          },\n          {\n            \"dataId\": \"100704\",\n            \"name\": \"韩语\"\n          },\n          {\n            \"dataId\": \"100705\",\n            \"name\": \"法语\"\n          },\n          {\n            \"dataId\": \"100706\",\n            \"name\": \"德语\"\n          },\n          {\n            \"dataId\": \"100707\",\n            \"name\": \"西班牙语\"\n          },\n          {\n            \"dataId\": \"100708\",\n            \"name\": \"意大利语\"\n          },\n          {\n            \"dataId\": \"100709\",\n            \"name\": \"葡萄牙语\"\n          },\n          {\n            \"dataId\": \"100710\",\n            \"name\": \"阿拉伯语\"\n          },\n          {\n            \"dataId\": \"100711\",\n            \"name\": \"小语种\"\n          },\n          {\n            \"dataId\": \"100712\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100800\",\n        \"name\": \"律师/法务\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100801\",\n            \"name\": \"律师助理\"\n          },\n          {\n            \"dataId\": \"100802\",\n            \"name\": \"法务专员\"\n          },\n          {\n            \"dataId\": \"100803\",\n            \"name\": \"律师\"\n          },\n          {\n            \"dataId\": \"100804\",\n            \"name\": \"专利顾问\"\n          },\n          {\n            \"dataId\": \"100805\",\n            \"name\": \"合规管理\"\n          },\n          {\n            \"dataId\": \"100806\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"100900\",\n        \"name\": \"财务/审计\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"100901\",\n            \"name\": \"财务经理\"\n          },\n          {\n            \"dataId\": \"100902\",\n            \"name\": \"会计\"\n          },\n          {\n            \"dataId\": \"100903\",\n            \"name\": \"出纳\"\n          },\n          {\n            \"dataId\": \"100904\",\n            \"name\": \"会计助理\"\n          },\n          {\n            \"dataId\": \"100905\",\n            \"name\": \"财务总监\"\n          },\n          {\n            \"dataId\": \"100906\",\n            \"name\": \"审计专员\"\n          },\n          {\n            \"dataId\": \"100907\",\n            \"name\": \"审计经理\"\n          },\n          {\n            \"dataId\": \"100908\",\n            \"name\": \"统计员\"\n          },\n          {\n            \"dataId\": \"100909\",\n            \"name\": \"税务专员\"\n          },\n          {\n            \"dataId\": \"100910\",\n            \"name\": \"税务经理\"\n          },\n          {\n            \"dataId\": \"100911\",\n            \"name\": \"财务分析员\"\n          },\n          {\n            \"dataId\": \"100912\",\n            \"name\": \"成本管理员\"\n          },\n          {\n            \"dataId\": \"100913\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101000\",\n        \"name\": \"广告/咨询\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101001\",\n            \"name\": \"咨询顾问\"\n          },\n          {\n            \"dataId\": \"101002\",\n            \"name\": \"广告制作\"\n          },\n          {\n            \"dataId\": \"101003\",\n            \"name\": \"广告文案\"\n          },\n          {\n            \"dataId\": \"101004\",\n            \"name\": \"广告创意\"\n          },\n          {\n            \"dataId\": \"101005\",\n            \"name\": \"创意总监\"\n          },\n          {\n            \"dataId\": \"101006\",\n            \"name\": \"会展策划\"\n          },\n          {\n            \"dataId\": \"101007\",\n            \"name\": \"客户主管\"\n          },\n          {\n            \"dataId\": \"101008\",\n            \"name\": \"企业策划\"\n          },\n          {\n            \"dataId\": \"101009\",\n            \"name\": \"媒介策划\"\n          },\n          {\n            \"dataId\": \"101010\",\n            \"name\": \"婚礼策划\"\n          },\n          {\n            \"dataId\": \"101011\",\n            \"name\": \"咨询经理\"\n          },\n          {\n            \"dataId\": \"101012\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101100\",\n        \"name\": \"美术/设计\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101101\",\n            \"name\": \"服装设计\"\n          },\n          {\n            \"dataId\": \"101102\",\n            \"name\": \"平面设计\"\n          },\n          {\n            \"dataId\": \"101103\",\n            \"name\": \"美编\"\n          },\n          {\n            \"dataId\": \"101104\",\n            \"name\": \"家居设计\"\n          },\n          {\n            \"dataId\": \"101105\",\n            \"name\": \"美术指导\"\n          },\n          {\n            \"dataId\": \"101106\",\n            \"name\": \"店面设计\"\n          },\n          {\n            \"dataId\": \"101107\",\n            \"name\": \"珠宝设计\"\n          },\n          {\n            \"dataId\": \"101108\",\n            \"name\": \"动画设计\"\n          },\n          {\n            \"dataId\": \"101109\",\n            \"name\": \"包装设计\"\n          },\n          {\n            \"dataId\": \"101110\",\n            \"name\": \"室内设计\"\n          },\n          {\n            \"dataId\": \"101111\",\n            \"name\": \"CAD制图\"\n          },\n          {\n            \"dataId\": \"101112\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101200\",\n        \"name\": \"编辑/出版\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101201\",\n            \"name\": \"编辑\"\n          },\n          {\n            \"dataId\": \"101202\",\n            \"name\": \"记者\"\n          },\n          {\n            \"dataId\": \"101203\",\n            \"name\": \"总编辑\"\n          },\n          {\n            \"dataId\": \"101204\",\n            \"name\": \"出版发行\"\n          },\n          {\n            \"dataId\": \"101205\",\n            \"name\": \"排版设计\"\n          },\n          {\n            \"dataId\": \"101206\",\n            \"name\": \"印刷操作\"\n          },\n          {\n            \"dataId\": \"101207\",\n            \"name\": \"装订烫金\"\n          },\n          {\n            \"dataId\": \"101208\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101300\",\n        \"name\": \"网络/IT\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101301\",\n            \"name\": \"网页设计\"\n          },\n          {\n            \"dataId\": \"101302\",\n            \"name\": \"网站编辑\"\n          },\n          {\n            \"dataId\": \"101303\",\n            \"name\": \"程序员\"\n          },\n          {\n            \"dataId\": \"101304\",\n            \"name\": \"技术专员\"\n          },\n          {\n            \"dataId\": \"101305\",\n            \"name\": \"软件工程师\"\n          },\n          {\n            \"dataId\": \"101306\",\n            \"name\": \"技术支持\"\n          },\n          {\n            \"dataId\": \"101307\",\n            \"name\": \"技术经理\"\n          },\n          {\n            \"dataId\": \"101308\",\n            \"name\": \"硬件工程师\"\n          },\n          {\n            \"dataId\": \"101309\",\n            \"name\": \"质量工程师\"\n          },\n          {\n            \"dataId\": \"101310\",\n            \"name\": \"测试工程师\"\n          },\n          {\n            \"dataId\": \"101311\",\n            \"name\": \"系统架构师\"\n          },\n          {\n            \"dataId\": \"101312\",\n            \"name\": \"项目经理\"\n          },\n          {\n            \"dataId\": \"101313\",\n            \"name\": \"产品经理\"\n          },\n          {\n            \"dataId\": \"101314\",\n            \"name\": \"网站运营\"\n          },\n          {\n            \"dataId\": \"101315\",\n            \"name\": \"网站策划\"\n          },\n          {\n            \"dataId\": \"101316\",\n            \"name\": \"网络管理员\"\n          },\n          {\n            \"dataId\": \"101317\",\n            \"name\": \"信息安全\"\n          },\n          {\n            \"dataId\": \"101318\",\n            \"name\": \"通信工程师\"\n          },\n          {\n            \"dataId\": \"101319\",\n            \"name\": \"实施工程师\"\n          },\n          {\n            \"dataId\": \"101320\",\n            \"name\": \"DBA\"\n          },\n          {\n            \"dataId\": \"101321\",\n            \"name\": \"游戏设计\"\n          },\n          {\n            \"dataId\": \"101322\",\n            \"name\": \"视频设计\"\n          },\n          {\n            \"dataId\": \"101323\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101400\",\n        \"name\": \"金融/证券\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101401\",\n            \"name\": \"理财顾问\"\n          },\n          {\n            \"dataId\": \"101402\",\n            \"name\": \"证券分析\"\n          },\n          {\n            \"dataId\": \"101403\",\n            \"name\": \"柜员\"\n          },\n          {\n            \"dataId\": \"101404\",\n            \"name\": \"证券经纪人\"\n          },\n          {\n            \"dataId\": \"101405\",\n            \"name\": \"证券经理\"\n          },\n          {\n            \"dataId\": \"101406\",\n            \"name\": \"信用卡业务\"\n          },\n          {\n            \"dataId\": \"101407\",\n            \"name\": \"银行经理\"\n          },\n          {\n            \"dataId\": \"101408\",\n            \"name\": \"信贷管理\"\n          },\n          {\n            \"dataId\": \"101409\",\n            \"name\": \"资产评估\"\n          },\n          {\n            \"dataId\": \"101410\",\n            \"name\": \"担保典当\"\n          },\n          {\n            \"dataId\": \"101411\",\n            \"name\": \"拍卖师\"\n          },\n          {\n            \"dataId\": \"101412\",\n            \"name\": \"外汇经纪人\"\n          },\n          {\n            \"dataId\": \"101413\",\n            \"name\": \"融资专员\"\n          },\n          {\n            \"dataId\": \"101414\",\n            \"name\": \"融资经理\"\n          },\n          {\n            \"dataId\": \"101415\",\n            \"name\": \"风险管理\"\n          },\n          {\n            \"dataId\": \"101416\",\n            \"name\": \"操盘手\"\n          },\n          {\n            \"dataId\": \"101417\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101500\",\n        \"name\": \"市场/公关\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101501\",\n            \"name\": \"市场专员\"\n          },\n          {\n            \"dataId\": \"101502\",\n            \"name\": \"市场经理\"\n          },\n          {\n            \"dataId\": \"101503\",\n            \"name\": \"公关员\"\n          },\n          {\n            \"dataId\": \"101504\",\n            \"name\": \"市场拓展\"\n          },\n          {\n            \"dataId\": \"101505\",\n            \"name\": \"市场调研\"\n          },\n          {\n            \"dataId\": \"101506\",\n            \"name\": \"市场策划\"\n          },\n          {\n            \"dataId\": \"101507\",\n            \"name\": \"媒介专员\"\n          },\n          {\n            \"dataId\": \"101508\",\n            \"name\": \"媒介经理\"\n          },\n          {\n            \"dataId\": \"101509\",\n            \"name\": \"会展专员\"\n          },\n          {\n            \"dataId\": \"101510\",\n            \"name\": \"品牌经理\"\n          },\n          {\n            \"dataId\": \"101511\",\n            \"name\": \"公关经理\"\n          },\n          {\n            \"dataId\": \"101512\",\n            \"name\": \"企划经理\"\n          },\n          {\n            \"dataId\": \"101513\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101600\",\n        \"name\": \"保险/理赔\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101601\",\n            \"name\": \"保险顾问\"\n          },\n          {\n            \"dataId\": \"101602\",\n            \"name\": \"储备经理\"\n          },\n          {\n            \"dataId\": \"101603\",\n            \"name\": \"经纪人\"\n          },\n          {\n            \"dataId\": \"101604\",\n            \"name\": \"保险内勤\"\n          },\n          {\n            \"dataId\": \"101605\",\n            \"name\": \"项目经理\"\n          },\n          {\n            \"dataId\": \"101606\",\n            \"name\": \"核保理赔\"\n          },\n          {\n            \"dataId\": \"101607\",\n            \"name\": \"保险精算师\"\n          },\n          {\n            \"dataId\": \"101608\",\n            \"name\": \"产品开发\"\n          },\n          {\n            \"dataId\": \"101609\",\n            \"name\": \"续期管理\"\n          },\n          {\n            \"dataId\": \"101610\",\n            \"name\": \"保险培训师\"\n          },\n          {\n            \"dataId\": \"101611\",\n            \"name\": \"契约管理\"\n          },\n          {\n            \"dataId\": \"101612\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101700\",\n        \"name\": \"房地产\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101701\",\n            \"name\": \"房产经纪人\"\n          },\n          {\n            \"dataId\": \"101702\",\n            \"name\": \"置业顾问\"\n          },\n          {\n            \"dataId\": \"101703\",\n            \"name\": \"置业店长\"\n          },\n          {\n            \"dataId\": \"101704\",\n            \"name\": \"房产店员\"\n          },\n          {\n            \"dataId\": \"101705\",\n            \"name\": \"房产客服\"\n          },\n          {\n            \"dataId\": \"101706\",\n            \"name\": \"房产内勤\"\n          },\n          {\n            \"dataId\": \"101707\",\n            \"name\": \"房地产策划\"\n          },\n          {\n            \"dataId\": \"101708\",\n            \"name\": \"房产评估师\"\n          },\n          {\n            \"dataId\": \"101709\",\n            \"name\": \"其他房产职位\"\n          },\n          {\n            \"dataId\": \"101710\",\n            \"name\": \"其他\"\n          }\n        ]\n      },\n      {\n        \"dataId\": \"101800\",\n        \"name\": \"高级管理\",\n        \"jobtype\": [\n          {\n            \"dataId\": \"101801\",\n            \"name\": \"总监\"\n          },\n          {\n            \"dataId\": \"101802\",\n            \"name\": \"总裁助理\"\n          },\n          {\n            \"dataId\": \"101803\",\n            \"name\": \"副总裁\"\n          },\n          {\n            \"dataId\": \"101804\",\n            \"name\": \"分公司经理\"\n          },\n          {\n            \"dataId\": \"101805\",\n            \"name\": \"首席执行官\"\n          },\n          {\n            \"dataId\": \"101806\",\n            \"name\": \"首席运营官\"\n          },\n          {\n            \"dataId\": \"101807\",\n            \"name\": \"首席财务官\"\n          },\n          {\n            \"dataId\": \"101808\",\n            \"name\": \"首席技术官\"\n          },\n          {\n            \"dataId\": \"101809\",\n            \"name\": \"合伙人\"\n          },\n          {\n            \"dataId\": \"101810\",\n            \"name\": \"其他\"\n          }\n        ]\n      }\n    ]\n  }\n]"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"click\">#f1f1f1</color>\n    <color name=\"white\">#ffffff</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">ExpandTable</string>\n\n    <string name=\"hello_world\">Hello world!</string>\n    <string name=\"action_settings\">Settings</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.1.0'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon May 23 08:59:39 CST 2016\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched.\nif $cygwin ; then\n    [ -n \"$JAVA_HOME\" ] && JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\nfi\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include 'app'"
  }
]