目前我的一个项目中需要物流追踪界面实现,我想到时候ListView来实现物流追踪界面。下面我们先来看一下界面实现的效果:

该效果完全是使用ListView来实现了,下面我们来看一下是如何实现的

(一):布局ListView并编写Item布局

首先需要在布局上面编写ListView:

```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bobo.trace.MainActivity" ><ListView android:id="@+id/lv_trace"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="@drawable/trace_divider"android:dividerHeight="1dp"></ListView></RelativeLayout>```

然后编写ListView的item布局:

<?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" ><RelativeLayout android:id="@+id/rl_trace_item"android:layout_width="match_parent"android:layout_height="wrap_content"><View
            android:id="@+id/v_up_line"android:layout_width="2.5dp"android:layout_height="10dp"android:background="@color/mgrey"android:layout_marginLeft="22dp"></View><ImageView android:id="@+id/iv_state"android:layout_width="16dp"android:layout_height="16dp"android:src="@drawable/circle"android:layout_marginTop="10dp"android:layout_marginLeft="15dp"/><TextView android:id="@+id/tv_trace_info"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_toRightOf="@id/iv_state"android:layout_marginLeft="20dp"android:text="@string/test_trace_info"android:textColor="@android:color/black"android:textSize="13sp"/><LinearLayout android:id="@+id/ll_trace_phone"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="3dp"android:layout_toRightOf="@id/iv_state"android:layout_marginLeft="20dp"android:orientation="horizontal"android:layout_below="@id/tv_trace_info"><TextView android:id="@+id/tv_phone_label"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/phone_label"android:textColor="@android:color/black"android:textSize="13sp"/><TextView android:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:text="@string/test_phone"android:textColor="@android:color/black"android:textSize="13sp"/></LinearLayout><TextView android:id="@+id/tv_trace_time"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="3dp"android:layout_toRightOf="@id/iv_state"android:layout_marginLeft="20dp"android:text="@string/test_trace_info"android:textColor="@android:color/black"android:textSize="13sp"android:layout_below="@id/ll_trace_phone"/><View
            android:id="@+id/v_down_line"android:layout_width="2.5dp"android:layout_height="45dp"android:background="@color/mgrey"android:layout_below="@id/iv_state"android:layout_marginLeft="22dp"></View></RelativeLayout></RelativeLayout>

下面我们来看一下item效果:

在上面的效果图中,我们就可以看出,在这个item布局中,左边是”线-图片-线“的布局,显示一个时间轴,右边显示相应的信息,包括物流信息,联系电话和时间;我们知道,在时间轴中,第一个点是不需要上面那个线的,最后一个点是不需要下面那个线的,所以,这个的处理就需要我们在Adapter中进行相应的处理。

(二):自定义Adapter

下面我们就需要自定义Adapter来填充数据和进行View处理。

当然,在编写Adapter之前,我们需要一个javabean来保存相应的信息。

Trace.java:

package com.bobo.beans;public class Trace {private boolean isHead;private String info;private String phone;private String time;public Trace(boolean isHead, String info, String phone, String time) {super();this.isHead = isHead;this.info = info;this.phone = phone;this.time = time;}public boolean isHead() {return isHead;}public void setHead(boolean isHead) {this.isHead = isHead;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}

下面我们就可以愉快的编写Adapter类了:

package com.bobo.adapters;import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.bobo.beans.Trace;import com.bobo.trace.R;public class TraceAdapter extends BaseAdapter {private ArrayList<Trace> tradeLists = null;private LayoutInflater inflater;private Context context;public TraceAdapter(ArrayList<Trace> tradeLists,Context context){this.tradeLists = tradeLists;this.context = context;this.inflater = LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn tradeLists == null ? 0 : tradeLists.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn tradeLists.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Holder holder;if(convertView == null){convertView = inflater.inflate(R.layout.trace_item, null);holder = new Holder();holder.v_up_line = (View)convertView.findViewById(R.id.v_up_line);holder.iv_state = (ImageView)convertView.findViewById(R.id.iv_state);holder.tv_trace_info = (TextView)convertView.findViewById(R.id.tv_trace_info);holder.ll_trace_phone = (LinearLayout)convertView.findViewById(R.id.ll_trace_phone);holder.tv_phone = (TextView)convertView.findViewById(R.id.tv_phone);holder.tv_trace_time = (TextView)convertView.findViewById(R.id.tv_trace_time);holder.v_down_line = (View)convertView.findViewById(R.id.v_down_line);convertView.setTag(holder);}else{holder = (Holder)convertView.getTag();}if(tradeLists.get(position).isHead()){holder.v_up_line.setVisibility(View.GONE);//holder.iv_state = (ImageView)convertView.findViewById(R.id.iv_state);holder.tv_trace_info.setText(tradeLists.get(position).getInfo());holder.tv_phone.setText(tradeLists.get(position).getPhone());holder.tv_trace_time.setText(tradeLists.get(position).getTime());holder.v_down_line.setVisibility(View.VISIBLE);}else if(tradeLists.size() == (position+1)){holder.tv_trace_info.setText(tradeLists.get(position).getInfo());holder.ll_trace_phone.setVisibility(View.GONE);holder.tv_trace_time.setText(tradeLists.get(position).getTime());holder.v_down_line.setVisibility(View.GONE);}else{holder.tv_trace_info.setText(tradeLists.get(position).getInfo());holder.ll_trace_phone.setVisibility(View.GONE);holder.tv_trace_time.setText(tradeLists.get(position).getTime());holder.v_down_line.setVisibility(View.VISIBLE);}return convertView;}class Holder{View v_up_line;ImageView iv_state;TextView tv_trace_info;LinearLayout ll_trace_phone;TextView tv_phone;TextView tv_trace_time;View v_down_line;}}

这样,我们的Adapter就已经适配完成,下面我们在Activity中实验一下。

(三):Activity实验:

package com.bobo.trace;import java.util.ArrayList;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.widget.ListView;import com.bobo.adapters.TraceAdapter;import com.bobo.beans.Trace;public class MainActivity extends Activity {private ListView lv_trace;private ArrayList<Trace> tradeLists = new ArrayList<Trace>();private TraceAdapter ta;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = MainActivity.this;initView();}private void initView(){lv_trace = (ListView)findViewById(R.id.lv_trace);initData();ta = new TraceAdapter(tradeLists, context);lv_trace.setAdapter(ta);}private void initData(){tradeLists.add(new Trace(true, "商家已从广东发货", "15253157943", "2016-03-16 13:30:43"));tradeLists.add(new Trace(false, "货物正在配送", "", "2016-03-16 18:30:43"));tradeLists.add(new Trace(false, "货物已到达天津转运中心", "", "2016-03-17 13:30:43"));tradeLists.add(new Trace(false, "货品已到济南货运站", "", "2016-03-18 13:30:43"));tradeLists.add(new Trace(false, "货物已送达济南高新区站点", "", "2016-03-19 13:30:43"));}
}

这样运行之后,我们就会发现,ListView的selector宽度是占满全屏的,这样,我们就需要编写一个inset来调整ListView的selector。

trace_divider.xml:

<?xml version="1.0" encoding="utf-8"?><inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="50dp"android:drawable="@color/mgrey"></inset>

这样,我们的物流追踪界面就算是完成了,很简单。

ListView实现物流追踪相关推荐

  1. 创客小制作(含源代码)《RFID控制器》,用于智能门禁、物流追踪、控制开关等,基于Arduino

    创客小制作(含源代码)<RFID控制器>,用于智能门禁.物流追踪.控制物品等,基于Arduino 目录 创客小制作(含源代码)<RFID控制器>,用于智能门禁.物流追踪.控制物 ...

  2. 基于STM32设计的物流追踪系统(GPS+BC20+华为云IOT)

    1. 前言 随着人们生活节奏的加快,促使物流行业突飞猛进的快速的发展,物流行业的快速发展也导致物流过程出现了一系列的问题.近年来贵重物品在物流中的比例越来越多,同时贵重物流在物流过程中的丢失也越来越多 ...

  3. 环回测试能够提供什么信息_Wish为什么要为订单提供物流追踪信息?

    为订单提供有效的物流追踪信息,能够提高用户的购物体验并增强其信任感,还能为卖家所履行的订单提供配送证明.这意味着Wish能够更快地确认物流信息并且卖家能够更快地得到货款. 若卖家选择不提供订单的物流追 ...

  4. 如何提供包裹物流追踪的更新信息给用户

    包裹物流状态跟踪已成为标准的电商服务功能.现在不仅仅是大型电商卖家会为所有线上订单提供包裹物流状态自动更新服务,连中小电商企业也会提供这一服务.我们最近的研究发现,84% 的消费者表示,选择在小电商店 ...

  5. oto餐饮app实时订单物流追踪系统架构设计(一)

    1.引言 .1 1.1目的 不管是淘点点或者饿了么,只要是打算做外卖的app,我觉得没有实时地图展示外卖订单位置信息是说不过去的,因为我觉得外卖对于物流实时性是非常苛刻的.11:00定的外卖在12:0 ...

  6. 小程序物流追踪状态页面

    <!-- 外层pages --> <view class='pages'><!-- 头部 --><view class='head'><image ...

  7. 一款支持公众号后端数据同步带分销在线客服物流追踪的小程序商城源码

    近年来,社交电商成为热门话题,拼多多又给社交电商点了一把火.有人说拼多多帮助腾讯补上了电商短板,也有人说拼多多模式只能短期存在,没办法和阿里.京东相提并论.无论怎样,拼多多的3亿用户足矣值得我们深入探 ...

  8. 快递鸟物流追踪收费接口

    /*** Json方式 物流信息订阅* @param string $shipper_code 快递公司编码* @param string $logistic_code 物流单号* @param st ...

  9. 教你如何用Python追踪快递信息!

    本文讲解的是如何让python自动为你查询快递信息,并在物流发生更新或者到达指定地点时第一时间将物流推送至你的邮箱. 其实并不复杂,只需要两大步即可搞定: 1.爬取物流动态信息 2.将信息推送至邮箱 ...

  10. 企业如何从 0 到 1 构建整套全链路追踪体系

    简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...

最新文章

  1. 使用Jupyter notebooks上传文件夹或大量数据到服务器 有解压缩ZIP
  2. 数据中心机房夏日降温措施
  3. 使用PHP+ajax打造聊天室应用
  4. 反恐精英代码_反恐精英20周年,为什么沙漠2(dust2)地图玩家们一直玩不腻?...
  5. 定义EJB 3.1视图(本地,远程,无接口)
  6. 前端学习(3287):Aop2
  7. 运行报错Error starting ApplicationContext
  8. TCP协议的部分解析(3)
  9. 区块链的爆发仍为时尚早......
  10. 解决Ubuntu SSH登录时过慢的问题-转
  11. 机器学习/深度学习测试题(一) —— 单层感知器的激活函数
  12. uva-110-没有for循环的排序
  13. 15天玩转redis —— 第四篇 哈希对象类型
  14. 顶岗实习周记java方向_java软件开发顶岗实习周记
  15. windows 安装 perl 教程
  16. GIF 斗图警告!GitHub 标星 5.5k+,Sorry 会编程就是可以 为所欲为!
  17. 解决M1处理器款mac安装DW闪退问题 Dreamweaver 2021 Mac(已适配M1芯片,支持最新款M1芯片Mac)
  18. 向你推荐VCENTER文章
  19. 设计模式二:创建型-工厂模式
  20. 设置webview的浏览器标识 User-Agent

热门文章

  1. 如何在阿里云中注册域名
  2. 机器学习(四):决策树绘画(基础篇)
  3. EasyOCR,识别图片中的文字真的so easy
  4. php 获取问号后面,php-重写包含问号的URL
  5. 输入一个字符串,内有数字和非数字字符,例如: A123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123存放在a[0],456放在a[1]中
  6. gin-vue-admin 使用docker容器中的数据库
  7. c语言语法基础知识,英语语法_英语语法基础知识
  8. python求三重积分_三重积分的Python数值计算
  9. 【BBF系列协议】TR104 VoIP CPE的配置参数
  10. 决胜B端(一)概述篇-走进B端