Android实现仿excel数据表格效果

在没给大家分享代码之前,先给大家展示下效果图:

1.activity

/** 
* 采购需求 
* Created by Administrator on 2016/10/13. 
*/ 
public class PurchaseRequireActivity extends BaseActivity implements PurchaseRequireView { 
@Bind(R.id.appTitle) 
TextView appTitle; 
@Bind(R.id.scrollLinearLayout) 
LinearLayout titleLinearLayout; 
@Bind(R.id.scroll_list) 
ListView mListView; 
@Bind(R.id.item_scroll_title) 
CHTableScrollView headerScroll; 
public HorizontalScrollView mTouchView; 
private List<CHTableScrollView> mHScrollViews = new ArrayList<>();// 装入所有的 HScrollView 
private HashMap<String,TextView> mColumnControls = new HashMap<>(); 
private PPOrderRequirePresenter presenter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
try { 
setContentView(R.layout.activity_purchase_require); 
ButterKnife.bind(this); 
init();// 初始化 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
/** 
* 初始化 
*/ 
private void init() { 
presenter = new PPOrderRequirePresenter(this,this); 
presenter.GetToday(); 
} 
@OnClick({R.id.backRLot}) 
public void onClick(View view) { 
switch (view.getId()) { 
case R.id.backRLot: 
finish(); 
break; 
} 
} 
public void scrollTo_0_0() {// 全部列表滑动到开始位置 
for (final CHTableScrollView hScrollView : mHScrollViews) { 
mListView.post(new Runnable() { 
@Override 
public void run() { 
//当listView刷新完成之后,把该条移动到最终位置 
hScrollView.scrollTo(0,0); 
} 
}); 
} 
} 
public void onScrollChanged(int l,int t) { 
for (CHTableScrollView scrollView : mHScrollViews) { 
if (mTouchView != scrollView) 
scrollView.smoothScrollTo(l,t);//防止重复滑动 
} 
} 
public void onClickText(String str,int position) {// 点击的事件 
System.out.println(str + "-" + position); 
} 
@Override 
public void refreshLV(List<PPOrderRequireMobModel> newList) { 
list.clear(); 
list.addAll(newList); 
} 
@Override 
public void initViews(String[] cols,List<Map<String,String>> datas) { 
// 全部列表滑动到开始位置 
scrollTo_0_0(); 
// 清空所有的view 
titleLinearLayout.removeAllViews(); 
//Table Title 
for (int i = 0; i < cols.length; i++) { 
if (i != 0) { 
View linearLay = presenter.newView(PurchaseRequireActivity.this,R.layout.row_title_edit_view,cols[i]); 
TextView et = (TextView) linearLay.findViewById(R.id.tevEditView); 
if (cols[i].contains("-")) {// setTextColor 
if (cols[i].substring(cols[i].length() - 1,cols[i].length()).equals("2")) {// 2专柜:红色,1买断:黑色 
et.setTextColor(Color.RED); 
} else { 
et.setTextColor(Color.DKGRAY); 
} 
} else { 
et.setTextColor(Color.DKGRAY); 
} 
et.setText(cols[i].substring(0,cols[i].length() - 2));//设置每一列顶表格数据 
titleLinearLayout.addView(linearLay); 
} 
} 
// 添加头滑动事件,先清空列表 
mHScrollViews.clear(); 
mHScrollViews.add(headerScroll); 
mListView.setDividerHeight(0);//设置分割线高度 
mColumnControls.clear(); 
for (int i = 0; i < cols.length; i++) {// 门店名称+现金 or 门店名称+外欠 
if (i != 0) {//预留第一列 
EditText etItem1 = new EditText(PurchaseRequireActivity.this); 
etItem1.setWidth(50);// 设置宽度 
etItem1.setTextColor(Color.DKGRAY); 
etItem1.setGravity(Gravity.CENTER); 
mColumnControls.put(cols[i],etItem1); 
} 
} 
BaseAdapter adapter = new PurchaseRequireAdapter(this,datas,R.layout.row_item_edit,cols,mColumnControls,mHScrollViews,mListView); 
mListView.setAdapter(adapter); 
} 
}

2.view

/** 
* 采购需求 
* Created by Administrator on 2016/10/13. 
*/ 
public interface PurchaseRequireView { 
void refreshLV(List<PPOrderRequireMobModel> newList); 
void initViews(String[] cols,String>> datas); 
}

3.PPOrderRequirePresenter

/** 
* 采购需求 
* Created by Administrator on 2016/10/13. 
*/ 
public class PPOrderRequirePresenter { 
private PurchaseRequireView view; 
private Context context; 
public PPOrderRequirePresenter(Context context,PurchaseRequireView view) { 
this.context = context; 
this.view = view; 
} 
/** 
* 获取数据 
*/ 
public void GetToday() { 
String billDate = getStartBillDate();//FreshRoadUtil.getTodayDate_normal().substring(0,10); 
int dimen = Integer.parseInt(getDimen());// 默认条件:日期=当天 、维度=按门店 
String url = InterfaceNameUtil.PPOrderRequireGetRequire(billDate,dimen); 
Log.e("url",url); 
final SweetAlertDialog dialog = AppUtil.showLoading(context,"正在发送请求,请稍后..."); 
APIListTRequest<PPOrderRequireMobModel> request = new APIListTRequest<>( 
url,null,PPOrderRequireMobModel.class,new Response.Listener<List<PPOrderRequireMobModel>>() { 
@Override 
public void onResponse(List<PPOrderRequireMobModel> list) { 
if (list != null) {// && list.size() > 0 
view.refreshLV(list); 
doSomethingFroList(list); 
view.refreshVerticalLV(getPNameFromDB(list));// 刷新一下导航条 
} 
dialog.dismiss(); 
} 
},new Response.ErrorListener() { 
@Override 
public void onErrorResponse(VolleyError error) { 
AppUtil.toError(dialog,error); 
} 
}); 
request.setAddTokenToHeader(false); 
VolleyUtil.start(context,request); 
} 
/** 
* 生成用于显示excel的数据源 
* 
* @param newList newList 
*/ 
public void doSomethingFroList(List<PPOrderRequireMobModel> newList) { 
ArrayList<String> nameList = new ArrayList<>();// 货物 
ArrayList<Long> CargoIDList = new ArrayList<>();// 货物ID 
ArrayList<String> colsList = new ArrayList<>();// 门店名称-现金 or 门店名称-外欠 
for (PPOrderRequireMobModel bean : newList) { 
String cargoName = bean.getCargoName(); 
if (bean.getCargoName().length() > 6) 
cargoName = cargoName.substring(0,6); 
nameList.add(cargoName + "n存:" + FreshRoadUtil.doubleTrans(bean.getQtyInventory()) + ",需:" + FreshRoadUtil.doubleTrans(bean.getQtyRequire())); 
CargoIDList.add(bean.getCargoID()); 
for (PPOrderRequireItemMobModel itemBean : bean.getItems()) { 
if (!isHave(colsList,itemBean.getName(),itemBean.getNatureType())) { 
colsList.add(itemBean.getName() + "-" + itemBean.getNatureType()); 
} 
} 
} 
// 排序,先1.买断、再2.专柜 
Collections.sort(colsList,new Comparator<String>() { 
@Override 
public int compare(String left,String right) { 
return (left.substring(left.length() - 1,left.length())).compareTo(right.substring(right.length() - 1,right.length())); 
//return (right.substring(right.length() - 1,right.length())).compareTo(left.substring(left.length() - 1,left.length())); 
} 
}); 
colsList.add(0,"品名规格/店名");// excel控件的位于首位置的“提示”单元格文本 
//Column 
String[] cols = colsList.toArray(new String[colsList.size()]); 
String[] name = nameList.toArray(new String[nameList.size()]); 
List<Map<String,String>> datas = new ArrayList<>(); 
Map<String,String> data; 
for (int i = 0; i < name.length; i++) { 
data = new HashMap<>(); 
data.put(cols[0],name[i]);//设置每一行头表格数据 
for (int j = 1; j < cols.length; j++) { 
data.put(cols[j],getShowText(newList,CargoIDList.get(i),colsList.get(j))); 
} 
datas.add(data); 
} 
view.initViews(cols,datas); 
} 
/** 
* 列表中是否已经存在相应文本(外面 是 CargoID 是主键,里面是:Name+NatureType是唯一键) 
* 
* @param colsList colsList 
* @param name name 
* @param NatureType NatureType 
* @return 是否 
*/ 
public boolean isHave(ArrayList<String> colsList,String name,int NatureType) { 
for (String itemStr : colsList) { 
if (itemStr.equals(name + "-" + NatureType)) { 
return true; 
} 
} 
return false; 
} 
/** 
* 获取要显示的文本 
* 
* @param list list 
* @param CargoID CargoID 
* @param name name 
* @return 显示的文本 
*/ 
public String getShowText(List<PPOrderRequireMobModel> list,long CargoID,String name) { 
for (PPOrderRequireMobModel bean : list) { 
for (PPOrderRequireItemMobModel itemBean : bean.getItems()) { 
if (bean.getCargoID() == CargoID && (itemBean.getName() + "-" + itemBean.getNatureType()).equals(name)) { 
return FreshRoadUtil.doubleTrans(itemBean.getQtyRequire()); 
} 
} 
} 
return " "; 
} 
/** 
* 新增一个view 
* 
* @param context context 
* @param res_id res_id 
* @param tag_name tag_name 
* @return view 
*/ 
public View newView(Context context,int res_id,String tag_name) { 
View itemView = LayoutInflater.from(context).inflate(res_id,null); 
itemView.setTag(tag_name); 
return itemView; 
} 
}

4.PurchaseRequireAdapter

/** 
* 采购需求 
* Created by Administrator on 2016/10/13. 
*/ 
public class PurchaseRequireAdapter extends BaseAdapter { 
private List<? extends Map<String,?>> datas; 
private int res; 
private String[] from; 
private Context context; 
protected List<CHTableScrollView> mHScrollViews = new ArrayList<>(); 
private HashMap<String,TextView> mColumnControls; 
private ListView mListView; 
public PurchaseRequireAdapter(Context context,List<? extends Map<String,?>> data,int resource,String[] from,HashMap<String,TextView> mColumnControls,List<CHTableScrollView> mHScrollViews,ListView mListView) { 
this.context = context; 
this.datas = data; 
this.res = resource; 
this.from = from; 
this.mColumnControls = mColumnControls; 
this.mHScrollViews = mHScrollViews; 
this.mListView = mListView; 
} 
@Override 
public int getCount() { 
return datas.size(); 
} 
@Override 
public Object getItem(int position) { 
return datas.get(position); 
} 
@Override 
public long getItemId(int position) { 
return position; 
} 
@Override 
public View getView(int position,View convertView,ViewGroup parent) { 
View v = convertView; 
if (v == null) { 
v = LayoutInflater.from(context).inflate(res,null); 
//第一次初始化的时候装进来 
mColumnControls.put("title",(TextView) v.findViewById(R.id.item_title)); 
View chsv = v.findViewById(R.id.item_scroll); 
LinearLayout ll = (LinearLayout) chsv.findViewById(R.id.item_scroll_layout); 
View[] views = new View[from.length]; 
for (int i = 0; i < from.length; i++) { 
if (i == 0) { 
views[0] = v.findViewById(R.id.item_title); 
continue; 
} 
View linearLay = newView(context,R.layout.row_item_edit_view,from[i]); 
TextView td = (TextView) linearLay.findViewById(R.id.ievEditView); 
td.setTag(position); 
td.setOnClickListener(clickListener);// 文本的点击事件 
ll.addView(linearLay); 
views[i] = td; 
} 
v.setTag(views); 
addHViews((CHTableScrollView) chsv); 
} 
View[] holders = (View[]) v.getTag(); 
int len = holders.length; 
for (int i = 0; i < len; i++) { 
if (i == 0) { 
String oldStr = this.datas.get(position).get(from[i]).toString();// 西瓜n存:12,需:32 
String cargoStr = oldStr.substring(0,oldStr.indexOf("n"));// 西瓜 
String numberStr_1 = oldStr.substring(oldStr.indexOf(":") + 1,oldStr.indexOf(","));// 12 
String numberStr_2 = oldStr.substring(oldStr.lastIndexOf(":") + 1,oldStr.length());// 32 
String sText = "<font color="#000000">" + cargoStr + "</font>" 
+ "<br>" 
+ "<font color="#999999">存:</font> " 
+ "<font color="#000000">" + numberStr_1 + "</font> " 
+ "<font color="#999999">,需:</font> " 
+ "<font color="#000000">" + numberStr_2 + "</font> "; 
((TextView) holders[i]).setText(Html.fromHtml(sText)); 
} else { 
((TextView) holders[i]).setText(this.datas.get(position).get(from[i]).toString()); 
//((TextView) holders[i]).setTextColor(Color.parseColor("#FFA500")); 
} 
} 
return v; 
} 
private View newView(Context context,null); 
itemView.setTag(tag_name); 
return itemView; 
} 
public void addHViews(final CHTableScrollView hScrollView) { 
if (!mHScrollViews.isEmpty()) { 
int size = mHScrollViews.size(); 
CHTableScrollView scrollView = mHScrollViews.get(size - 1); 
final int scrollX = scrollView.getScrollX(); 
//第一次满屏后,向下滑动,有一条数据在开始时未加入 
if (scrollX != 0) { 
mListView.post(new Runnable() { 
@Override 
public void run() { 
//当listView刷新完成之后,把该条移动到最终位置 
hScrollView.scrollTo(scrollX,0); 
} 
}); 
} 
} 
mHScrollViews.add(hScrollView); 
} 
// 点击的事件 
private View.OnClickListener clickListener = new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
((PurchaseRequireActivity) context).onClickText(((TextView) v).getText().toString(),(int) v.getTag()); 
} 
}; 
}

5.CHTableScrollView

/** 
* excel 布局 
* Created by Administrator on 2016/10/13. 
*/ 
public class CHTableScrollView extends HorizontalScrollView { 
PurchaseRequireActivity activity; 
public CHTableScrollView(Context context,AttributeSet attrs,int defStyle) { 
super(context,attrs,defStyle); 
activity = (PurchaseRequireActivity) context; 
} 
public CHTableScrollView(Context context,AttributeSet attrs) { 
super(context,attrs); 
activity = (PurchaseRequireActivity) context; 
} 
public CHTableScrollView(Context context) { 
super(context); 
activity = (PurchaseRequireActivity) context; 
} 
@Override 
public boolean onTouchEvent(MotionEvent ev) { 
//进行触摸赋值 
activity.mTouchView = this; 
return super.onTouchEvent(ev); 
} 
@Override 
protected void onScrollChanged(int l,int t,int oldl,int oldt) { 
//当当前的CHScrollView被触摸时,滑动其它 
if (activity.mTouchView == this) { 
activity.onScrollChanged(l,t); 
} else { 
super.onScrollChanged(l,t,oldl,oldt); 
} 
} 
}

6.activity_purchase_require

<?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="#FFFFFF" 
android:orientation="vertical"> 
<include layout="@layout/default_app_head3" /> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/bg_light_gray" 
android:baselineAligned="false" 
android:orientation="horizontal"> 
<RelativeLayout 
android:id="@+id/shop_mission_ll" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:layout_weight="2"> 
<RelativeLayout 
android:id="@+id/shop_mission_delete_ll" 
android:layout_width="50dp" 
android:layout_height="35dp" 
android:layout_alignParentRight="true"> 
<ImageView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerInParent="true" 
android:layout_marginRight="15dp" 
android:contentDescription="@string/app_name" 
android:src="@drawable/x_clear_icon" /> 
</RelativeLayout> 
<TextView 
android:id="@+id/shop_mission_search_tv" 
android:layout_width="match_parent" 
android:layout_height="35dp" 
android:layout_toLeftOf="@id/shop_mission_delete_ll" 
android:gravity="center" 
android:text="点击这里,设置查询条件" 
android:textColor="@color/black_text" 
android:textColorHint="@color/light_gray_text" 
android:textSize="@dimen/font_small" /> 
</RelativeLayout> 
<RelativeLayout 
android:layout_width="0dp" 
android:layout_height="match_parent" 
android:layout_weight="1"> 
<TextView 
android:id="@+id/purchase_select_tv" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerVertical="true" 
android:singleLine="true" 
android:text="" 
android:textSize="12sp" /> 
<RelativeLayout 
android:id="@+id/purchase_tv_delete_ll" 
android:layout_width="45dp" 
android:layout_height="35dp" 
android:layout_alignParentRight="true"> 
<ImageView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerInParent="true" 
android:layout_marginRight="15dp" 
android:contentDescription="@string/app_name" 
android:src="@drawable/x_clear_icon" /> 
</RelativeLayout> 
</RelativeLayout> 
</LinearLayout> 
<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<ListView 
android:id="@+id/order_vertical_lv" 
android:layout_width="35dp" 
android:layout_height="wrap_content" 
android:layout_alignParentRight="true" 
android:layout_centerVertical="true" 
android:divider="@null" 
android:scrollbars="none" /> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_toLeftOf="@id/order_vertical_lv" 
android:orientation="vertical"> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:gravity="fill_vertical" 
android:minHeight="40dip" 
android:orientation="horizontal"> 
<TextView 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="3" 
android:background="@drawable/bg_edittext_normal_s" 
android:enabled="false" 
android:gravity="center" 
android:maxLines="1" 
android:maxWidth="@dimen/scroll_tab_column_width" 
android:minWidth="@dimen/scroll_tab_column_width" 
android:singleLine="true" 
android:text="品名规格/店名" 
android:textColor="@android:color/black" 
android:textSize="12sp" /> 
<com.co_insight.freshroad.business.widget.CHTableScrollView 
android:id="@+id/item_scroll_title" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1" 
android:scrollbars="none"> 
<LinearLayout 
android:id="@+id/scrollLinearLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" /> 
</com.co_insight.freshroad.business.widget.CHTableScrollView> 
</LinearLayout> 
<ListView 
android:id="@+id/scroll_list" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:cacheColorHint="@android:color/transparent" 
android:scrollbars="none" /> 
</LinearLayout> 
<com.co_insight.freshroad.views.widgets.HorizontalListView 
android:id="@+id/shop_mission_item_hlv" 
android:layout_width="60dp" 
android:layout_height="40dp" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="40dp" 
android:background="@drawable/fresh_road_bg_button_normal" 
android:visibility="gone" /> 
</RelativeLayout> 
</LinearLayout>

7.row_title_edit_view

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="@dimen/scroll_tab_column_width" 
android:layout_height="match_parent" 
android:minHeight="50dip" 
android:orientation="vertical"> 
<TextView 
android:id="@+id/tevEditView" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1" 
android:background="@drawable/bg_edittext_normal_title" 
android:editable="false" 
android:enabled="false" 
android:gravity="center" 
android:maxLines="2" 
android:maxWidth="@dimen/scroll_tab_column_width" 
android:minWidth="@dimen/scroll_tab_column_width" 
android:paddingLeft="3dp" 
android:paddingRight="3dp" 
android:textColor="@android:color/black" 
android:textSize="12sp" /> 
</LinearLayout> 
8.row_item_edit_view
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="@dimen/scroll_tab_column_width" 
android:layout_height="match_parent" 
android:minHeight="50dip" 
android:orientation="vertical"> 
<TextView 
android:id="@+id/ievEditView" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1" 
android:background="@drawable/bg_edittext" 
android:gravity="center" 
android:maxLines="2" 
android:maxWidth="@dimen/scroll_tab_column_width" 
android:minWidth="@dimen/scroll_tab_column_width" 
android:textSize="12sp" 
android:textColor="@android:color/black" /> 
</LinearLayout>

9.row_item_edit

<?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="20dp" 
android:maxHeight="20dp" 
android:minHeight="20dp" 
android:orientation="horizontal"> 
<TextView 
android:id="@+id/item_title" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="3" 
android:background="@drawable/bg_edittext_normal_s" 
android:enabled="false" 
android:gravity="center" 
android:maxLines="2" 
android:maxWidth="@dimen/scroll_tab_column_width" 
android:minWidth="@dimen/scroll_tab_column_width" 
android:text="测试" 
android:textColor="@android:color/black" 
android:textSize="12sp" /> 
<com.co_insight.freshroad.business.widget.CHTableScrollView 
android:id="@+id/item_scroll" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1" 
android:scrollbars="none"> 
<LinearLayout 
android:id="@+id/item_scroll_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" /> 
</com.co_insight.freshroad.business.widget.CHTableScrollView> 
</LinearLayout>

10.bg_edittext

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/bg_edittext_normal" android:state_window_focused="false"/> 
<item android:drawable="@drawable/bg_edittext_focused" android:state_focused="true"/> 
</selector> 
11.bg_edittext_focused
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
<solid android:color="#FFFFFF" /> 
<corners android:radius="0dip" /> 
<stroke 
android:width="0.1dp" 
android:color="@color/nav_selected" /> 
</shape>

12.bg_edittext_normal

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
<solid android:color="#FFFFFF" /> 
<corners android:radius="0dip" /> 
<stroke 
android:width="0.1dp" 
android:color="@color/nav_selected" /> 
</shape> 

13.bg_edittext_normal_title

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
 <!--北京填充色--> 
 <solid android:color="#00FFFFFF" /> 
 <!--角的度数--> 
 <corners android:radius="0dip" /> 
 <!-- 边框 --> 
 <stroke 
  android:width="0.1dp" 
  android:color="@color/nav_selected" /> 

14.PPOrderRequireMobModel

package com.co_insight.freshroad.business.bean; 
import java.util.ArrayList; 
import java.util.List; 
/** 
* 采购需求 
* Created by Administrator on 2016/10/13. 
*/ 
public class PPOrderRequireMobModel { 
private long CargoID;// 货物ID 
private String CargoName;// 货物名称 
private long UnitID;// 单位ID 
private String UnitName;// 单位 
private long PNameID;// 小类 
private long CategoryID;// 品名属性ID 
private String CategoryName;// 品名属性 
private double QtyRequire;// 需求量 
private double QtyInventory;// 库存量 
private long ID; 
private String CreateDate; 
private String UpdateDate; 
private List<PPOrderRequireItemMobModel> Items = new ArrayList<>();// 需求明细 
public long getCargoID() { 
return CargoID; 
} 
public void setCargoID(long CargoID) { 
this.CargoID = CargoID; 
} 
public String getCargoName() { 
return CargoName; 
} 
public void setCargoName(String CargoName) { 
this.CargoName = CargoName; 
} 
public long getUnitID() { 
return UnitID; 
} 
public void setUnitID(long UnitID) { 
this.UnitID = UnitID; 
} 
public String getUnitName() { 
return UnitName; 
} 
public void setUnitName(String UnitName) { 
this.UnitName = UnitName; 
} 
public long getPNameID() { 
return PNameID; 
} 
public void setPNameID(long PNameID) { 
this.PNameID = PNameID; 
} 
public long getCategoryID() { 
return CategoryID; 
} 
public void setCategoryID(long CategoryID) { 
this.CategoryID = CategoryID; 
} 
public String getCategoryName() { 
return CategoryName; 
} 
public void setCategoryName(String CategoryName) { 
this.CategoryName = CategoryName; 
} 
public double getQtyRequire() { 
return QtyRequire; 
} 
public void setQtyRequire(double QtyRequire) { 
this.QtyRequire = QtyRequire; 
} 
public double getQtyInventory() { 
return QtyInventory; 
} 
public void setQtyInventory(double QtyInventory) { 
this.QtyInventory = QtyInventory; 
} 
public long getID() { 
return ID; 
} 
public void setID(long ID) { 
this.ID = ID; 
} 
public String getCreateDate() { 
return CreateDate; 
} 
public void setCreateDate(String CreateDate) { 
this.CreateDate = CreateDate; 
} 
public String getUpdateDate() { 
return UpdateDate; 
} 
public void setUpdateDate(String UpdateDate) { 
this.UpdateDate = UpdateDate; 
} 
public List<PPOrderRequireItemMobModel> getItems() { 
return Items; 
} 
public void setItems(List<PPOrderRequireItemMobModel> items) { 
Items = items; 
} 
}

好了,代码到此结束。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

以上是来客网为你收集整理的Android实现仿excel数据表格效果全部内容,希望文章能够帮你解决Android实现仿excel数据表格效果所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。