Listview中某个item需要有倒计时的方案

综合网上的一些,自己写了个,不想改了,凑合着看吧,根据自己的需求自己改吧

Activity

public class MainActivity extends Activity {
    private ListView lv1;
    private HAdapter adapter;
    private ArrayList<Datashuju> sj;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv1 = (ListView) findViewById(R.id.lv1);
        sj= getData();
        for(Datashuju data : sj){//对数据处理,
            data.isTimer = compareTime(data);
        }
        adapter = new HAdapter(MainActivity.this,sj);
        adapter.setListView(lv1);
        lv1.setAdapter(adapter);
        adapter.start();

    }

    @Override
    protected void onDestroy() {
        Log.e("url", "Destroy");
        adapter.removeshuju();
        super.onDestroy();
    }
    //初始化一些数据
    private ArrayList<Datashuju> getData(){
        ArrayList<Datashuju> shuju = new ArrayList<Datashuju>();
        int a = 0;
        for(a =0;a<100;a++){
            Datashuju d = new Datashuju();
            if(a == 1){
                d.setS("2015-12-09 05:05:05");
                d.setE("2015-12-08 06:06:06");
                d.setType("111");
            } else if(a == 2){
                d.setS( "2015-12-02 05:05:05");
                d.setE("2015-12-08 06:06:06");
                d.setType("222");
            } else {
                d.setS( a + "在");
                d.setTime("0");
                d.setType(a+""+a+a);
            }
            shuju.add(d);
        }
        return shuju;
    }

    private boolean compareTime(Datashuju d){
        if(null != d.s && null != d.e){
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar c1 = Calendar.getInstance();
            Calendar c2 = Calendar.getInstance();

            try {
                c1.setTime(df.parse(d.s));//当前时间
                c2.setTime(df.parse(d.e));//截止时间
            } catch (ParseException e) {
                e.printStackTrace();
            }
            int result = c1.compareTo(c2);
            if(result == 0){
                return  false;
            } else if(result < 0){
                //c1小于c2
                return true;
            } else if(result > 0){
                //c1大于c2
                return false;
            }
        }
        return false;
    }


}

adapter

public class HAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<Datashuju> shuju;
    ViewHolder holder = null;
    private TextView tv1, tv2;
    private int time;
    private ListView mListView;
    public HAdapter(Context context, ArrayList<Datashuju> data){
        mContext = context;
        shuju = data;
    }
    public void setListView(ListView listView){
        this.mListView = listView;
    }
    @Override
    public int getCount() {
        return shuju == null ? 0 : shuju.size();
    }

    @Override
    public Object getItem(int position) {
        return shuju.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){
             holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_view,null);
            holder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
            holder.tv2 = (TextView) convertView.findViewById(R.id.tv2);
            holder.tv3 = (TextView) convertView.findViewById(R.id.tv3);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Datashuju bean = shuju.get(position);
        holder.tv1.setText(bean.type);
        holder.tv2.setText(bean.s);
        holder.tv3.setText(bean.time);

        return convertView;
    }

    /**用来更新时间,只有当前的item可见时,才去跟新倒计时*/
    private void updateTime(){
        if(mListView !=null){
            int start = mListView.getFirstVisiblePosition();
            for(int i=start, j=mListView.getLastVisiblePosition();i<=j;i++)
                if( ((Datashuju)mListView.getItemAtPosition(i)).isTimer){
                    View view = mListView.getChildAt(i-start);
                    ViewHolder holder = (ViewHolder) view.getTag();
                    holder.tv3 = (TextView)view.findViewById(R.id.tv3);
                    holder.tv3.setText(shuju.get(i).time);
                }
        }
    }

    public class ViewHolder{
        TextView tv1;
        TextView tv2;
        TextView tv3;
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what ==1) {
                updateTime();
            }
        }
    };


    int result = 0;
    private Thread thread;

    public void start() {
        thread = new Thread() {
            public void run() {
                while (true) {
                    try {
                        result++;
                        if (null == shuju ) {
                            break;
                        }
                        if(shuju.size() == 0){
                            break;
                        }
                        sleep(1000);
                        Log.e("url", "uu");
                        if(null != shuju ) {
                            for (Datashuju data : shuju) {
                                if(data.isTimer){
                                    data.time = daojishi(data,result);
                                }
                                handler.sendEmptyMessage(1);
                            }
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread.start();
    }

    public void removeshuju(){
        if(null != shuju){
           shuju.clear();
        }
        shuju = null;
    }

    public String daojishi(Datashuju datasj,int i){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long MIAO = 1000;
        Date one;
        Date two;

        long days = 0;
        long hours = 0;
        long min = 0;
        long sec = 0;

        try {
            one = df.parse(datasj.s);
            two = df.parse(datasj.e);

            long time1 = one.getTime();
            long time2 = two.getTime();
            long diff = time2 - time1 - i * 1000;

            if(  0 == diff){
//                mContext.sendBroadcast();
            }

            days = diff / (1000 * 60 * 60 * 24);
            hours = diff / (1000 * 60 * 60) - days * 24;
            min = (diff / (1000 * 60)) - days * 24 * 60 - hours * 60;
            sec = diff / 1000 - days * 24 * 60 * 60 - hours * 60 * 60 - min * 60;
            String s = days + "天" + hours + "时" + min + "分" + sec + "秒";
            return s;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

实体类

public class Datashuju {

    public String  time;
    //开始时间
    public String s;
    //截止时间
    public String e;
    //是否需要倒计时
    public boolean isTimer ;

    public String type;
    public String getE() { 
		return e; } 
    public void setE(String e) { 
		this.e = e; } 
    public String getType() { 
		return type; } 
    public void setType(String type) { 
		this.type = type; }
	public void setTime(String time) { 
		this.time = time; } 
	public void setS(String s) { 
		this.s = s; } 
	public String getS() {
		return s; }
	public String getTime() {
		return time; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值