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, List<Map<String, 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, int res_id, String tag_name) {
View itemView = LayoutInflater.from(context).inflate(res_id, 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;
}
}

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

(0)

相关推荐

  • android通过jxl读excel存入sqlite3数据库

    复制代码 代码如下: package com.demo.day20140228; import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement; import jxl.Cell;import jxl.Sheet;import jx

  • Android 中读取Excel文件实例详解

    Android 中读取Excel文件实例详解 最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一...),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下. 闲话一下Excel中工作簿和工作表的区别: 工作簿中包含有工作表.工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件. 好了,开始读取表格文件吧. 前提 首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下.

  • Android操作Excel文件的功能实现

    Android中操作Excel文件导出报表时主要采用开源库jxl,最早用在java上,但也可用于Android.与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android. 使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下: 1.jxl只支持Excel2003格式,不支持Excel2007格式.即支持xls文件,不支持xlsx文件. 2.jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件

  • Android开发实现生成excel的方法详解

    本文实例讲述了Android开发实现生成excel的方法.分享给大家供大家参考,具体如下: 都说程序员不爽产品经理,其实有的时候遇到一些奇葩的后台开发人员也会很不顺心.最近项目有这样一个要求,要生成一个excel然后发邮件给客户.结果后台人员直接把这个功能扔给客户端,理由是后台不好实现.听到这也就只能自己实现了(分分钟就想来个螺旋王扣它头上).这篇博客讲下如下在android中生成excel表并存到本地.先看下生成后的效果图: 初始化数据 首先我们要先造下测试数据,这里我把数据写死在一个常量类C

  • Android应用读取Excel文件的方法

    本文实例讲述了Android应用读取Excel文件的方法.分享给大家供大家参考,具体如下: ReadExcel.java文件: public class ReadExcel extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

  • Android 操作excel功能实例代码

    学习app对excel的读写控制 1.界面设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id

  • android读取assets中Excel表格并显示

    本文实例为大家分享了android读取assets中Excel的具体代码,供大家参考,具体内容如下 1.在assets下放的excel表格,命名为excel.xls 2.添加读取excel需要的jar包"jxl.jar",assets是建在main级别目录下,建错地方找不到文件 3.读取excel中的文件 /*获取excel表格中的数据不能在主线程中调用 xlsName 为表格的名称 index 表示第几张表格 */ public ArrayList<ExcelBean>

  • 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.scrollLinearLayou

  • Android仿微信底部菜单栏效果

    前言 在市面上,大多数的APP都需要通过底部菜单栏来将程序的功能进行分类整理,通常都是分为3-5个大模块,从而正确有效地引导用户去使用我们的APP.实现底部菜单栏的方法也有很多种. 1.仿微信底部菜单栏(ViewPager+ImagerView+TextView) ......(其他方式后续会补充) 效果预览 首先来个开胃菜,看看实现效果: 先贴出项目所需的资源文件,这些可随个人自由更改颜色和文字 colors.xml <color name="bg_line_light_gray&quo

  • Android开发实现读取excel数据并保存为xml的方法

    本文实例讲述了Android开发实现读取excel数据并保存为xml的方法.分享给大家供大家参考,具体如下: 前阵子,公司请外面人翻译了一些android中values中的一些strings,然而保存的都是excel格式,如果单纯的将excel中的数据粘贴到指定的xml中的话,工作量非常的大,于是,自己写了个简单的demo,将excel中的数据读取并保存为xml对应的数据,下面的demo和图片展示: 1.数据保存在BeanValue中,包括key和value,方便后续数据读取 package c

  • Vue.js仿Metronic高级表格(二)数据渲染

    上篇使用Vue.js制作仿Metronic高级表格(一)静态设计介绍了需求.原型设计以及静态页面实现,这篇讲解如何使用Vue渲染数据,实现动态展示. 表格数据 先定义一个数组来保存所有数据: var vm = new Vue({ el:'#content', data: { book_list: [ {id:1, name:"标准日本语", type: "文化", price:19.00, time: 1492502043}, {id:2, name:"微

  • 利用Javascript仿Excel的数据透视分析功能

    什么是数据透视分析? 数据透视分析就是要在 不同维度对数据进行汇总,过滤,分析,比较,作图.用来发现数据的变化趋势和不同因素导致的差异. 这在销售,统计,金融 等方面十分有用,常常会在一些管理软件中使用. 接下来使用Excel介绍了什么是数据透视分析和数据透视表. 下面我使用 Excel的数据透视表 来分析 iPhone手机2013,2014 和2015 年在中国和美国的销售量数据,以总结iPhone手机的销售趋势. 申明:所有数据都是自己编造的,无任何参考价值. Excel 数据透视表和数据透

  • Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

  • AJAX 仿EXCEL表格功能

    仿Excel表格演示 //////////////////////////////////////////变量-初始化/////////////////////////////////////// var toBeColor = "#F8F9FC"; var backColor = "#FFFFFF"; var tableId = "tbData"; var table; var tbody; var divShowInput; window.o

  • Android UI仿QQ好友列表分组悬浮效果

    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeaderExpandableListView.java 要注意的是 在 onGroupClick方法中parent.setSelectedGroup(groupPosition)这句代码的作用是点击分组置顶, 我这边不须要这个效果.QQ也没实用到,所以给凝视了.大家假设须要能够解开凝视 package c

  • Android 高仿微信朋友圈动态支持双击手势放大并滑动查看图片效果

    最近参与了开发一款旅行APP,其中包含实时聊天和动态评论功能,终于耗时几个月几个伙伴完成了,今天就小结一下至于实时聊天功能如果用户不多的情况可以scoket实现,如果用户万级就可以采用开源的smack + opnefile实现,也可以用mina开源+XMMP,至于怎么搭建和实现,估计目前github上一搜一大把,至于即时通讯怕误人子弟,暂且不做介绍,现就把实现的一个微信朋友圈的小功能介绍一下. 先上效果图: 一拿到主流的UI需求,大致分析下,需要我ListView嵌套Gridview,而grid

  • JavaScript实现Excel表格效果

    本文实例为大家分享了JavaScript实现Excel表格效果的具体代码,供大家参考,具体内容如下 一.主要实现: 1.List item 2.输入内容时显示边框 3.鼠标点击文本框以外部分失去焦点 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm

随机推荐