Repository: haibuzou/ExpandTable
Branch: master
Commit: 53f24cc99f7b
Files: 40
Total size: 90.4 KB
Directory structure:
gitextract_edkb4w1x/
├── .gitignore
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── libs/
│ │ └── gson-2.2.1.jar
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── haibuzou/
│ │ └── myapplication/
│ │ ├── MainActivity.java
│ │ ├── Utils.java
│ │ ├── adapter/
│ │ │ ├── CommonAdapter.java
│ │ │ ├── ExpandGridAdapter.java
│ │ │ ├── MyViewPagerAdapter.java
│ │ │ └── ViewHolder.java
│ │ ├── entity/
│ │ │ ├── BaseData.java
│ │ │ ├── GongZhong.java
│ │ │ └── ZhaoPin.java
│ │ └── view/
│ │ ├── CurrenPositionView.java
│ │ ├── ItemTextView.java
│ │ └── MyTextView.java
│ └── res/
│ ├── drawable/
│ │ └── main_click_selector.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ ├── expand_grid_item.xml
│ │ ├── expand_item.xml
│ │ ├── pulldown_view.xml
│ │ ├── table_row_item.xml
│ │ └── viewpager.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── raw/
│ │ └── zhaopin.json
│ ├── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp/
│ └── dimens.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
#built application files
*.apk
*.ap_
# files for the dex VM
*.dex
# Java class files
*.class
# generated files
bin/
gen/
# Local configuration file (sdk path, etc)
local.properties
# Windows thumbnail db
Thumbs.db
# OSX files
.DS_Store
# Eclipse project files
.classpath
.project
# Android Studio
*.iml
.idea
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
================================================
FILE: README.md
================================================
# ExpandTable
完全高仿58同城 点击展开的表格效果
使用tablelayout 来实现
### 效果图:

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