ListView只能正确显示10个项目

时间:2015-06-09 13:55:03

标签: java android listview

我正在开发一个时间跟踪应用程序,在我的列表列表视图中我有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

0 个答案:

没有答案