我正在开发一个时间跟踪应用程序,在我的列表列表视图中我有10个计时器,带有开始/暂停按钮,如果我添加第11个计时器,他将(仅在视觉上)计算1个计时器反之亦然,如果我启动第11个计时器,第一个计时器也将启动。
然后,如果我添加12' n' nd将会反过来,添加13' th e.t.c
仅在显示数据时出现问题,以编程方式运行良好。
我正在使用带有片段的viewPager。这是我的适配器的代码片段:
@Override
public View getView(final int position, final View convertView, ViewGroup parent) {
View row = convertView;
final Tracker tracker = trackerList.get(position);
final Thread thread = tracker.getThread();
ViewHolder holder;
long days,hours,minutes,seconds;
long eDays,eHours,eMins,eSecs;
if(row == null){
row = inflater.inflate(R.layout.list_item,parent,false);
holder = new ViewHolder(row);
row.setTag(holder);
}else {
holder = (ViewHolder) row.getTag();
}
//изнальначальный вид
final ViewHolder finalHolder = holder;
finalHolder.start.setVisibility(View.VISIBLE);
finalHolder.stop.setVisibility(View.GONE);
finalHolder.name.setText(tracker.getName());
if(tracker.getElapsedTime()!=0 && tracker.getLimitTime()==0){//если прошедшее время !=0 и таймер без лимита
days = tracker.getElapsedTime()/86400000;
hours = (tracker.getElapsedTime()/3600000)%24;
minutes = (tracker.getElapsedTime()/60000)%60;
seconds = (tracker.getElapsedTime()/1000)%60;
if(days!=0)
finalHolder.days.setText(Util.concat(days <= 9 ? 0 : "", days));
if(hours!=0)
finalHolder.hours.setText(Util.concat(hours <=9 ?0:"",hours));
if(minutes!=0)
finalHolder.minutes.setText(Util.concat(minutes<=9?0:"",minutes));
if(seconds!=0)
finalHolder.seconds.setText(Util.concat(seconds<=9?0:"",seconds));
}else{
if(tracker.getIsFinished()){//если таск закончен, дошел до лимита
hours = (tracker.getLimitTime()/3600000)%24;
minutes = (tracker.getLimitTime()/60000)%60;
seconds = (tracker.getLimitTime()/1000)%60;
finalHolder.start.setVisibility(View.GONE);
finalHolder.textFinish.setVisibility(View.VISIBLE);
finalHolder.stop.setVisibility(View.GONE);
if(seconds!=60)
finalHolder.seconds.setText(Util.concat(seconds<=9?0:"",seconds));
if(minutes!=60)
finalHolder.minutes.setText(Util.concat(minutes<=9?0:"",minutes));
if(hours!=24)
finalHolder.hours.setText(Util.concat(hours <= 9 ? 0 : "", hours));
}else{
if(tracker.getLimitTime()!=0 && !tracker.getIsFinished()){//если установлен лимит, но еще не дошел до конца
days = tracker.getLimitTime()/86400000;
hours = (tracker.getLimitTime()/3600000)%24;
minutes = (tracker.getLimitTime()/60000)%60;
finalHolder.textLimit.setVisibility(View.VISIBLE);
finalHolder.limHours.setVisibility(View.VISIBLE);
finalHolder.limDay.setVisibility(View.VISIBLE);
finalHolder.limMin.setVisibility(View.VISIBLE);
finalHolder.limDay.setText(Util.concat(days <= 9 ? 0 : "", days, ":"));
finalHolder.limHours.setText(Util.concat(hours <= 9 ? 0 : "", hours, ":"));
finalHolder.limMin.setText(Util.concat(minutes<=9?0:"",minutes));
eDays = (tracker.getElapsedTime() / 86400000);
eHours = (tracker.getElapsedTime()/3600000)%24;
eMins = (tracker.getElapsedTime()/60000)%60;
eSecs = (tracker.getElapsedTime()/1000)%60;
if(eSecs!=0)
finalHolder.seconds.setText(Util.concat(eSecs<=9?0:"",eSecs));
if(eMins!=0)
finalHolder.minutes.setText(Util.concat(minutes<=9?0:"",eMins));
if(eHours!=0)
finalHolder.hours.setText(Util.concat(hours<= 9 ? 0 : "", eHours));
if(eSecs!=0)
finalHolder.days.setText(Util.concat(days<= 9 ? 0 : "", eDays));
}else {
finalHolder.textLimit.setVisibility(View.GONE);
finalHolder.limHours.setVisibility(View.GONE);
finalHolder.limDay.setVisibility(View.GONE);
finalHolder.limMin.setVisibility(View.GONE);
}
}
}
if(tracker.getIsStart() && !tracker.getIsFinished()) {//если был стартован
finalHolder.start.setVisibility(View.GONE);
finalHolder.stop.setVisibility(View.VISIBLE);
}
tracker.setHolder(finalHolder);
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btStart:
tracker.setStartTime(System.currentTimeMillis());
tracker.setIsStart(true);
tracker.setHolder(finalHolder);
finalHolder.start.setVisibility(View.GONE);
finalHolder.stop.setVisibility(View.VISIBLE);
if(tracker.getUpdateTime()==0)
thread.start();
else
tracker.getThread().start();
break;
case R.id.btStop:
tracker.setLastPause(tracker.getUpdateTime());
finalHolder.stop.setVisibility(View.GONE);
finalHolder.start.setVisibility(View.VISIBLE);
tracker.setIsStart(false);
break;
}
}
};
finalHolder.start.setOnClickListener(onClickListener);
finalHolder.stop.setOnClickListener(onClickListener);
return row;
}
@Override
public int getViewTypeCount() {
/* Log.d("myTag","getViewTypeCount() = "+getCount());
if(getCount()==0)
return super.getViewTypeCount();
else
return getCount();*/
return 1;
}
@Override
public int getItemViewType(int position) {
return position;
}
static class ViewHolder{
@InjectView(R.id.tvName) TextView name;
@InjectView(R.id.tvDays) TextView days;
@InjectView(R.id.tvHours) TextView hours;
@InjectView(R.id.tvMinutes) TextView minutes;
@InjectView(R.id.tvSeconds) TextView seconds;
@InjectView(R.id.btStart) ButtonFloatSmall start;
@InjectView(R.id.btStop) ButtonFloatSmall stop;
@InjectView(R.id.txtFinish) TextView textFinish;
@InjectView(R.id.txtLimit) TextView textLimit;
@InjectView(R.id.limDay) TextView limDay;
@InjectView(R.id.limHours) TextView limHours;
@InjectView(R.id.limMin) TextView limMin;
public ViewHolder(View view){
ButterKnife.inject(this,view);
}
}
这是listview
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/trackListview"
android:scrollingCache="false"
android:drawSelectorOnTop="true"
android:persistentDrawingCache="none"
android:divider="@android:color/transparent"
android:dividerHeight="5.0sp"
/>
这是我的getView()日志,首先启动应用程序。 http://iscr.ru/photo/1433874284_getView.PNG