五、管理拍卖物品
ManageItem.java
package com.lq.auction;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
public class ManageItem extends FragmentActivity implements Callbacks{
@Override
public Fragment getFragment() {
return new ManageItemFragment();
}
@Override
public void onItemSelected(Integer id, Bundle bundle) {
//当用户单击“添加”按钮时,将会启动AddItem Activity
Intent i = new Intent(this,AddItem.class);
startActivity(i);
}
}
manage_item.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"
android:gravity="center" >
<LinearLayout
android:orientation="horizontal"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/sub_title_margin">
<LinearLayout
android:orientation="vertical"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="12dp">
<TextView
android:text="@string/manage_item"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- 添加物品的按钮 -->
<Button
android:id="@+id/bnAdd"
android:layout_width="85dp"
android:layout_height="30dp"
android:background="@drawable/add_item"/>
</LinearLayout>
<Button
android:id="@+id/bn_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/label_font_size"
android:background="@drawable/home"/>
</LinearLayout>
<ListView
android:id="@+id/itemList"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
ManageItemFragment.java
package com.lq.auction;
public class ManageItemFragment extends Fragment {
public static final int ADD_ITEM = 0x1006;
Button bnHome, bnAdd;
ListView itemList;
Callbacks mCallbacks;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.manage_item, container, false);
//获取界面上的“返回”按钮
bnHome = (Button) rootView.findViewById(R.id.bn_home);
bnAdd= (Button) rootView.findViewById(R.id.bnAdd);
itemList = (ListView) rootView.findViewById(R.id.itemList);
//为“返回”按钮的单击事件绑定事件监听器
bnHome.setOnClickListener(new HomeListener(getActivity()));
bnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCallbacks.onItemSelected(ADD_ITEM, null);
}
});
//定义发送请求的URL
String url = HttpUtil.BASE_URL + "viewOwnerItem.jsp"; //getArguments()?
try {
//向指定的URL发送请求,并把服务器响应转换成JSONArray对象
JSONArray jsonArray = new JSONArray(HttpUtil.getRequest(url));
//将JSONArray包装成Adapter
JSONArrayAdapter adapter = new JSONArrayAdapter(getActivity()
, jsonArray, "name", true);
itemList.setAdapter(adapter);
} catch (Exception e) {
DialogUtil.showDialog(getActivity(), "服务器异常,请稍后再试", false);
e.printStackTrace();
}
itemList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//查看指定物品的详细情况
viewItemBid(position);
}
});
return rootView;
}
//当该Fragment被添加、显示到Activity时,回调该方法
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(!(activity instanceof Callbacks)){
//如果Activity没有实现Callbacks接口,抛出异常
throw new IllegalStateException(
"ManageitemFragment所在的Activity必须实现Callbacks接口");
}
//把该Activity当成Callbacks对象
mCallbacks = (Callbacks) activity;
}
@Override
public void onDetach() {
super.onDetach();
//将mCallbacks赋为null
mCallbacks = null;
}
private void viewItemBid(int position) {
//加载detail_in_bid.xml界面布局代表的视图
View detailView = getActivity().getLayoutInflater()
.inflate(R.layout.detail_in_bid, null);
//获取detail_in_bid.xml界面布局中的文本框
TextView itemName = (TextView) detailView.findViewById(R.id.itemName);
TextView itemKind = (TextView) detailView.findViewById(R.id.itemKind);
TextView maxPrice = (TextView) detailView.findViewById(R.id.maxPrice);
TextView initPrice = (TextView) detailView.findViewById(R.id.initPrice);
TextView endTime = (TextView) detailView.findViewById(R.id.endTime);
TextView itemRemark = (TextView) detailView.findViewById(R.id.itemRemark);
//获取被单击的列表项
JSONObject jsonObj = (JSONObject) itemList.getAdapter().getItem(position);
try {
//通过文本框显示物品详情
itemName.setText(jsonObj.getString("name"));
itemKind.setText(jsonObj.getString("kind"));
initPrice.setText(jsonObj.getString("initPrice"));
endTime.setText(jsonObj.getString("endTime"));
maxPrice.setText(jsonObj.getString("maxPrice"));
itemRemark.setText(jsonObj.getString("desc"));
} catch (JSONException e) {
e.printStackTrace();
}
DialogUtil.showDialog(getActivity(), detailView);
}
}
detail_in_bid.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="@string/item_name"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/itemName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
<TableRow>
<TextView
android:text="@string/item_kind"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/itemKind"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
<TableRow>
<TextView
android:text="@string/win_price"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/maxPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
<TableRow>
<TextView
android:text="@string/init_price"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/initPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
<TableRow>
<TextView
android:text="@string/end_time"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/endTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
<TableRow>
<TextView
android:text="@string/remark"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/itemRemark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/tv_show"/>
</TableRow>
</TableLayout>
AddItem.java
package com.lq.auction;
import android.app.Fragment;
public class AddItem extends FragmentActivity{
@Override
public Fragment getFragment() {
return new AddItemFragment();
}
}
add_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TextView
android:text="@string/add_item_title"
android:gravity="center"
android:textSize="@dimen/label_font_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/title_padding"/>
<!-- 输入物品名称的行 -->
<TableRow>
<TextView
android:text="@string/item_name"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/itemName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</TableRow>
<!-- 输入物品描述的行 -->
<TableRow>
<TextView
android:text="@string/item_desc"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/itemDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</TableRow>
<!-- 输入物品备注的行 -->
<TableRow>
<TextView
android:text="@string/remark"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/itemRemark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</TableRow>
<!-- 输入起拍价格的行 -->
<TableRow>
<TextView
android:text="@string/init_price"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/initPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"/>
</TableRow>
<!-- 选择有效时间的行 -->
<TableRow>
<TextView
android:text="@string/avail_time"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/availTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/availTime"/>
</TableRow>
<!-- 输入选择物品种类的行 -->
<TableRow>
<TextView
android:text="@string/item_kind"
android:textSize="@dimen/label_font_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/itemKind"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</TableRow>
<!-- 定义按钮的行 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:id="@+id/bnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add"/>
<Button
android:id="@+id/bnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel"/>
</LinearLayout>
</TableLayout>
AddItemFragment.java
package com.lq.auction;
public class cextends Fragment {
// 定义界面中文本框
EditText itemName, itemDesc, itemRemark, initPrice;
Spinner itemKind, availTime;
// 定义界面中两个按钮
Button bnAdd, bnCancel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.add_item, container, false);
// 获取界面中的编辑框
itemName = (EditText) rootView.findViewById(R.id.itemName);
itemDesc = (EditText) rootView.findViewById(R.id.itemDesc);
itemRemark = (EditText) rootView.findViewById(R.id.itemRemark);
initPrice = (EditText) rootView.findViewById(R.id.initPrice);
itemKind = (Spinner) rootView.findViewById(R.id.itemKind);
availTime = (Spinner) rootView.findViewById(R.id.availTime);
//定义发送请求的URL
String url = HttpUtil.BASE_URL + "viewKind.jsp";
JSONArray jsonArray = null;
try {
//获取系统中所有的物品种类
//向指定的URL发送请求,并把服务器响应转换成JSONArray对象
jsonArray = new JSONArray(HttpUtil.getRequest(url));
} catch (Exception e1) {
e1.printStackTrace();
}
JSONArrayAdapter adapter = new JSONArrayAdapter(getActivity()
, jsonArray, "kindName", false); //注意大小写,之前把"kindName"写成了"kindname",导致物品种类显示不出来
itemKind.setAdapter(adapter);
// 获取界面中的两个按钮
bnAdd = (Button) rootView.findViewById(R.id.bnAdd);
bnCancel = (Button) rootView.findViewById(R.id.bnCancel);
// 为取消按钮的单击事件绑定事件监听器
bnCancel.setOnClickListener(new HomeListener(getActivity()));
bnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(validate()){
// 输入校验
String name = itemName.getText().toString();
String desc = itemDesc.getText().toString();
String remark = itemRemark.getText().toString();
String price = initPrice.getText().toString();
JSONObject kind = (JSONObject) itemKind.getSelectedItem();
int avail = availTime.getSelectedItemPosition();
//根据用户选择有效时间选项,指定实际的有效时间
switch (avail) {
case 5:
avail = 7;
break;
case 6:
avail = 30;
break;
default:
avail +=1;
break;
}
try {
// 添加物品
String result = addItem(name, desc
, remark, price, kind.getInt("id"), avail);
// 使用对话框来显示添加结果
DialogUtil.showDialog(getActivity(), result, true);
} catch (Exception e) {
DialogUtil.showDialog(getActivity()
, "服务器响应异常,请稍后再试", false);
e.printStackTrace();
}
}
}
});
return rootView;
}
// 对用户输入的种类名称进行校验
private boolean validate() {
String name = itemName.getText().toString().trim();
if(name.equals("")){
DialogUtil.showDialog(getActivity(), "物品名称是必填项", false);
return false;
}
String price = initPrice.getText().toString().trim();
if (price.equals("")) {
DialogUtil.showDialog(getActivity(), "起拍价格是必填项", false);
return false;
}
try {
//尝试把起拍价格转换为浮点数
Double.parseDouble(price);
} catch (NumberFormatException e) {
DialogUtil.showDialog(getActivity(), "起拍价格是必填是数值", false);
return false;
}
return true;
}
private String addItem(String name, String desc
, String remark, String initPrice, int kindId, int availTime)
throws Exception{
// 使用Map封装请求参数
Map<String, String> map = new HashMap<String, String>();
map.put("itemName", name);
map.put("itemDesc", desc);
map.put("itemRemark", remark);
map.put("initPrice", initPrice);
map.put("kindId", kindId + "");
map.put("availTime", availTime+ "");
// 定义发送请求的URL
String url = HttpUtil.BASE_URL + "addItem.jsp";
// 发送请求
return HttpUtil.postReuest(url, map);
}
}
运行效果图: