Кастомный адаптер. Вывод значений из БД в listview. Результат - копирование первой строки БД по кол-ву строк в БД

Рейтинг: -1Ответов: 2Опубликовано: 04.04.2015

Результатом моих попыток вывести в listview значения из БД заканчиваются выводом только одной строки из нее, столько раз, сколько записей в БД. Привожу фрагмент кода адаптера. Я понимаю что нужно или правильно передвигать курсор или дать holder'у объект с правильным набором значений, но как я его уже не двигал ничего не получается. Выскакивает исключение:

 android.database.CursorIndexOutOfBoundsException: Index 5 requested, with a size of 5

Фрагмент кода адаптера:

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
    TrackHolder holder=null;
    View row = convertView;
    final long[] lastPause = new long[1];

    final long limitTime = c.getLong(c.getColumnIndex(Tracker.COL_LIMIT_TIME));
    final boolean type = c.getInt(c.getColumnIndex(Tracker.COL_TYPE)) == 1;

    if(row==null){
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(resorceID,parent,false);
        holder = new TrackHolder();
        holder.name = (TextView)row.findViewById(R.id.row_name);
        holder.chronometer = (Chronometer)row.findViewById(R.id.row_chronometer);
        holder.limitTime = (TextView)row.findViewById(R.id.limitTime);
        holder.start = (Button)row.findViewById(R.id.btStart);
        holder.stop = (Button)row.findViewById(R.id.btStop);
        row.setTag(holder);
    }else{
       holder = (TrackHolder)row.getTag();
    }
    if(c.getCount()>0) {
        holder.name.setText(c.getString(c.getColumnIndex(Tracker.COL_NAME)));
        holder.limitTime.setText(c.getString(c.getColumnIndex(Tracker.COL_LIMIT_TIME)));
        holder.chronometer.setBase(SystemClock.elapsedRealtime());
        holder.chronometer.start();
        lastPause[0] = SystemClock.elapsedRealtime();
        if (holder.stop.isEnabled())
            holder.start.setEnabled(false);
        else
            holder.stop.setEnabled(true);
        final TrackHolder finalHolder = holder;
        holder.start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Start was clicked", Toast.LENGTH_SHORT).show();
                finalHolder.chronometer.start();
                finalHolder.chronometer.setBase(finalHolder.chronometer.getBase() + SystemClock.elapsedRealtime() - lastPause[0]);
                finalHolder.stop.setEnabled(true);
                finalHolder.start.setEnabled(false);
            }
        });
        holder.stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Stop was clicked", Toast.LENGTH_SHORT).show();
                finalHolder.chronometer.stop();
                lastPause[0] = SystemClock.elapsedRealtime();
                finalHolder.start.setEnabled(true);
                finalHolder.stop.setEnabled(false);
            }
        });
        holder.chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                long elapsedTime = SystemClock.elapsedRealtime() - finalHolder.chronometer.getBase();
                if (limitTime != 0 && elapsedTime > limitTime && type) {
                    Toast.makeText(context, "Tick is worked", Toast.LENGTH_SHORT).show();
                    finalHolder.chronometer.stop();
                    finalHolder.start.setEnabled(false);
                    finalHolder.stop.setEnabled(false);
                    sendNotification();
                }
            }
        });
    }
   return row;
}

Ответы

Ответов пока нет.