android 计时器列表,android – 带有Coundown计时器的ListView.滚动列表视图时,计时器闪烁...

在我的应用程序中,我必须显示listview中每个项目的倒数计时器.我已经能够使用CountDownTimer来做到这一点.但是,问题是当向上或向下滚动列表视图时,计时器开始闪烁.搜索了很多,但无法得到解决方案.

我的适配器类

public class BuyListingListAdapter extends BaseAdapter {

private Context mContext;

private ArrayList mVehicleList = new ArrayList();

private Date currentDate;

//Saving position in map to check if timer has been //started for this row

private HashMap timerMap = new HashMap();

public BuyListingListAdapter(Context context,ArrayList vehicleList,boolean showGridView) {

this.mContext = context;

this.mVehicleList = vehicleList;

this.showGridView = showGridView;

currentDate = new Date(System.currentTimeMillis());

int listSize = mVehicleList.size();

for (int i = 0; i < listSize; i++)

timerMap.put(i,false);

}

@Override

public int getCount() {

return mVehicleList.size();

}

@Override

public Object getItem(int position) {

return mVehicleList.get(position);

}

@Override

public long getItemId(int position) {

return 0;

}

@Override

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

final ViewHolder holder;

if (convertView == null) {

LayoutInflater inflater = LayoutInflater.from(parent.getContext());

convertView = inflater.inflate(R.layout.row_buy_listing_grid,parent,false);

holder = new ViewHolder();

holder.timer_layout = (LinearLayout) convertView

.findViewById(R.id.timer_layout);

holder.txt_remaining_days = (RobotoCondensedBoldTextView) convertView

.findViewById(R.id.txt_remaining_days);

holder.txt_remaining_hours = (RobotoCondensedBoldTextView) convertView

.findViewById(R.id.txt_remaining_hours);

holder.txt_remaining_mins = (RobotoCondensedBoldTextView) convertView

.findViewById(R.id.txt_remaining_mins);

holder.txt_remaining_secs = (RobotoCondensedBoldTextView) convertView

.findViewById(R.id.txt_remaining_secs);

holder.listing_status = (ImageView) convertView

.findViewById(R.id.listing_status);

convertView.setTag(holder);

} else

holder = (ViewHolder) convertView.getTag();

final VehicleAttributes vehicleAttributes = mVehicleList.get(position);

AuctionModel mAuctionModel = vehicleAttributes.getAuctionDetailModel();

if (mAuctionModel != null) {

holder.img_auction.setVisibility(View.VISIBLE);

Date auctionStartDate = Util

.getDateFromString(mAuctionModel.getStarted_at(),"yyyy-MM-dd hh:mm:ss","GMT");

Date auctionEndDate = Util.getDateFromString(

mAuctionModel.getEnded_at(),"GMT");

long diff = currentDate.getTime() - auctionEndDate.getTime();

if (diff < 0)

diff = -diff;

else

diff = 0;

if (timerMap.get(position) == null || !timerMap.get(position)) {

timerMap.put(position,true);

MyCountDown countDown = new MyCountDown(position,diff,1000,holder.txt_remaining_days,holder.txt_remaining_hours,holder.txt_remaining_mins,holder.txt_remaining_secs);

countDown.start();

}

}

return convertView;

}

private class MyCountDown extends CountDownTimer {

RobotoCondensedBoldTextView txt_remaining_days;

RobotoCondensedBoldTextView txt_remaining_hours;

RobotoCondensedBoldTextView txt_remaining_mins;

RobotoCondensedBoldTextView txt_remaining_secs;

int position;

public MyCountDown(int position,long millisInFuture,long countDownInterval,RobotoCondensedBoldTextView txt_remaining_days,RobotoCondensedBoldTextView txt_remaining_hours,RobotoCondensedBoldTextView txt_remaining_mins,RobotoCondensedBoldTextView txt_remaining_secs) {

super(millisInFuture,countDownInterval);

this.position = position;

this.txt_remaining_days = txt_remaining_days;

this.txt_remaining_hours = txt_remaining_hours;

this.txt_remaining_mins = txt_remaining_mins;

this.txt_remaining_secs = txt_remaining_secs;

}

@Override

public void onFinish() {

}

@Override

public void onTick(long millisUntilFinished) {

updateTimerLabel(position,millisUntilFinished,txt_remaining_days,txt_remaining_hours,txt_remaining_mins,txt_remaining_secs);

}

}

private void updateTimerLabel(int position,long millis,RobotoCondensedBoldTextView txt_remaining_secs) {

String days = String.format("%02d",TimeUnit.MILLISECONDS.toDays(millis));

String hours = String.format(

"%02d",TimeUnit.MILLISECONDS.toHours(millis)

- TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS

.toDays(millis)));

String mins = String.format(

"%02d",TimeUnit.MILLISECONDS.toMinutes(millis)

- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS

.toHours(millis)));

String secs = String.format(

"%02d",TimeUnit.MILLISECONDS.toSeconds(millis)

- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS

.toMinutes(millis)));

txt_remaining_days.setText(days);

txt_remaining_hours.setText(hours);

txt_remaining_mins.setText(mins);

txt_remaining_secs.setText(secs);

}

static class ViewHolder {

NetworkImageView mVehicleImage;

RobotoCondensedBoldTextView txt_remaining_days,txt_remaining_secs;

LinearLayout timer_layout;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值