Android(安卓)菜商品列表展示
16lz
2021-01-26
如上图所示
右边也是一个数据列表,但它里面包含图片、文本框等等,并且每列都会有与之对应的餐类。
Android 部分
获取右侧商品listview的控件
private ListView rightListView = (ListView) view.findViewById(R.id.menu_lvmenu);
通过Http请求服务器,设置方法名参数到后台查询成功后返回json字符串,JSONObject获取json对象data,再通过gson1.fromJson获取数据到mGoodsList集合中,再执行initData()方法,初始化数据。initData方法中配置了ListView的适配器,主要是显示列表数据。
String urlgoodsAll=ServiceUrls.getMenuItemsMethodUrl("selectGoodsAll")+ "?catalog_food_id=" + 0;OkHttpTool.httpPost(urlgoodsAll, null, new OkHttpTool.ResponseCallback() { @Override public void onResponse(boolean isSuccess, int responseCode, String response, Exception exception) { mActivityContext.runOnUiThread(new Runnable() { @Override public void run() { String strText = "网络环境不佳,请稍后再试"; if (isSuccess && responseCode == 200 && Tools.isNotNull(response)) { try { JSONObject jsonObject = new JSONObject(response); String strData = jsonObject.getString("data"); JSONArray jsonArray=new JSONArray(strData); Gson gson1=new Gson(); mGoodsList= gson1.fromJson(strData, new TypeToken>() {}.getType()); initData(); } catch (JSONException e) { e.printStackTrace(); } } } }); }});private void initData() { rightAdapter = new RightAdapter(mActivityContext,mGoodsList); //setAdapter 适配器就是用来显示列表项 rightListView.setAdapter(rightAdapter); }
RightAdapter适配器实现SectionIndexer接口, getCount获取list集合中的条目个数,getItem根据索引获取对应的内容,getItemId获取索引,getView获取当前条目需要展示的布局效果,viewProductHolder通过容器来存储,优化找控件的内存,判断如果没有可复用那就获取控件绑定到view上,最后对控件的数据进行设置,再通过发送请求到后端查询每一列的图片。
class RightAdapter extends BaseAdapter implements SectionIndexer { private List list = null; private Context mContext; public RightAdapter(Context mContext, List mGoodsList) { this.mContext = mContext; this.list = mGoodsList; } @Override public int getCount() { return this.list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewProductHolder viewProductHolder; final GoodsBean mGoods = list.get(position); if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.product_item, null); TextView tvTag = (TextView) convertView.findViewById(R.id.cate_name); TextView tvTitle = (TextView) convertView.findViewById(R.id.product_name_view); ImageView productImage = (ImageView) convertView.findViewById(R.id.product_imageView); TextView countView = (TextView) convertView.findViewById(R.id.add_count_view); TextView tvPrice = (TextView) convertView.findViewById(R.id.product_price_view); ImageView removeProductImage = (ImageView) convertView.findViewById(R.id.delete_product_view); ImageView addProductImage = (ImageView) convertView.findViewById(R.id.add_product_view); viewProductHolder = new ViewProductHolder(tvTag,tvTitle,productImage, countView,tvPrice, removeProductImage, addProductImage); convertView.setTag(viewProductHolder); } else { viewProductHolder = (ViewProductHolder) convertView.getTag(); } //如果有该类型,则隐藏 int section = getSectionForPosition(position); if (position == getPositionForSection(section)) { viewProductHolder.tvTag.setVisibility(View.VISIBLE); viewProductHolder.tvTag.setText(mGoods.getCatalogFoodname()); } else { viewProductHolder.tvTag.setVisibility(View.GONE); } viewProductHolder.tvTitle.setText(mGoods.getGoodsName()); viewProductHolder.tvPrice.setText("¥" + mGoods.getGoodsPrice()); int salecount = UIHelper.saleCount(getActivity(), mGoods.getGoodsId(),businessId); if (salecount > 0) { viewProductHolder.countView.setText(salecount + ""); viewProductHolder.countView.setVisibility(View.VISIBLE); viewProductHolder.removeProductImage.setVisibility(View.VISIBLE); } else { viewProductHolder.countView.setText(0 + ""); viewProductHolder.countView.setVisibility(View.GONE); viewProductHolder.removeProductImage.setVisibility(View.GONE); } /** * 查询获取商品的图片 * 请求 */ List photo= Collections.singletonList(mGoods.getGoodsPicture()); for (int i=0;i
SSM 后端部分
通过@ RequestMapping注解将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。 方法传入参数商品种类的id,根据种类id查询这个类下面有那几个商品,最后放到List集合中,json返回数据。在这是有两种情况,一种是全部查询,另一种是条件查询。
@ResponseBody@RequestMapping(value = "/selectGoodsAll", produces = "application/json;charset=UTF-8")public Object selectGoodsAll(int catalog_food_id) {JsonReturn jsonReturn = new JsonReturn();if(catalog_food_id>0) {List listGoodsAll = this.appMenuItemsService.selectlistGoodsByKind(catalog_food_id);if(listGoodsAll!=null) {jsonReturn.setCode(200);jsonReturn.setData(listGoodsAll);}else {jsonReturn.setCode(500);jsonReturn.setText("商品加载失败");}}else {List listGoodsByKind=this.appMenuItemsService.selectlistGoodsAll();if(listGoodsByKind!=null) {jsonReturn.setCode(200);jsonReturn.setData(listGoodsByKind);}else {jsonReturn.setCode(500);jsonReturn.setText("商品加载失败");}}return gson.toJson(jsonReturn);}获取商品图片,判断参数是否为空,设置照片所在的本地路径(定义一行AppSeting类public static final String UPLOAD_GOODS_TYPE_PIC_DIR = "D:\\课程\\安卓移动开发\\点餐吧\\商品图片";),再判断你所对应的路径文件是否存在,设置Header,设置为图片类型通过Android传过来的图片名称,到文件中查询出来再返回。@RequestMapping(value="/getGoodsPicture")public ResponseEntity getGoodsPicture(String pictureName) throws IOException {// 判断是否为空if (Tools.isNotNull(pictureName)) {// 文件 照片的路经 ,名称File file = new File(AppSeting.UPLOAD_GOODS_TYPE_PIC_DIR, pictureName);// 判断文件是否存在if (file.exists()) {// 设置HeaderHttpHeaders headers = new HttpHeaders();// 设置为图片类型headers.setContentType(MediaType.IMAGE_JPEG);headers.setContentDispositionFormData("attachment", pictureName);// 返回文件相关数据return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);}}return null;}
更多相关文章
- Android获取屏幕高度、状态栏高度、标题栏高度
- Android:实现带图片和CheckBox的ListView
- Android通过手机GPS获取经纬度方法
- android -------- GifView 显示gif图片
- Android根据当前时间获取前面的时间日期,或者之后的时间日期
- 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图
- Android(安卓)Handler消息机制中的ThreadLocal源码分析
- 获取手机的mac地址
- Android解决Java.util.concurrent.ExecutionException: com.Andr