Как пронумеровать элементы в представлении списка?

Мне было интересно, как установить число, начинающееся с 1 до n, для элементов списка. Столбец не включен в мою базу данных sqllite.

Я хотел бы использовать пользовательский простой адаптер курсора, который имеет текстовое представление с именем labelNumber и устанавливает число равным 1 при первом вызове newView и bindview и увеличивает значение после каждого вызова.

Это правильный подход или есть лучший способ. Очевидно, это должно помочь с навигацией по списку, чтобы узнать ваше текущее положение?

Код обновления работает, проверьте комментарии ниже

public class ProgressAdapter extends SimpleCursorAdapter {
private Context context;
private int layout;
private ViewHolder viewHolder;
    // create an integer to use as a number holder
private int n;


static class ViewHolder {
    public TextView number;
    public TextView setsText;
    public TextView repsText;
    public TextView weightText;
    public TextView completeText;
    public ImageView mgImage;
}

public ProgressAdapter(Activity context, int layout, Cursor c,
        String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.context = context;
    this.layout = layout;

}


@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    Cursor c = getCursor();
    viewHolder = new ViewHolder();
    final LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(layout, parent, false);
    // get the number using the cursor position
            // add 1 to the int to start at 1 instead of 0
    n = c.getPosition()+ 1;
            String lineNumber = Integer.toString(n);

    int setsColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_SETS);
    String sets = c.getString(setsColumn);

    int repsColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_REPS);
    String reps = c.getString(repsColumn);

    int weightColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_WEIGHT);
    String weight = c.getString(weightColumn);


    viewHolder.number = (TextView) v.findViewById(R.id.labelNumber);
    viewHolder.setsText = (TextView) v.findViewById(R.id.labelSets);
    viewHolder.repsText = (TextView) v.findViewById(R.id.labelReps);
    viewHolder.weightText = (TextView) v.findViewById(R.id.labelWeight);

    if ( viewHolder.setsText != null && viewHolder.repsText != null
            && viewHolder.weightText != null
            ) {
        viewHolder.number.setText(lineNumber);
        viewHolder.setsText.setText(sets);
        viewHolder.repsText.setText(reps);
        viewHolder.weightText.setText(weight);


    }
    return v;
}

@Override
public void bindView(View v, Context context, Cursor c) {
    viewHolder = new ViewHolder();
            // use cursor to get the integer and add 1 to position
    c = getCursor();
    n = c.getPosition()+ 1;
            String lineNumber = Integer.toString(n);
    int setsColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_SETS);
    String sets = c.getString(setsColumn);

    int repsColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_REPS);
    String reps = c.getString(repsColumn);

    int weightColumn = c.getColumnIndex(ExerciseDbAdapter.KEY_WEIGHT);
    String weight = c.getString(weightColumn);

    // set the fields for the view
    viewHolder.number = (TextView) v.findViewById(R.id.labelNumber);
    viewHolder.setsText = (TextView) v.findViewById(R.id.labelSets);
    viewHolder.repsText = (TextView) v.findViewById(R.id.labelReps);
    viewHolder.weightText = (TextView) v.findViewById(R.id.labelWeight);


    if (viewHolder.setsText != null && viewHolder.repsText != null
            && viewHolder.weightText != null
            ) {
        viewHolder.number.setText(lineNumber);
        viewHolder.setsText.setText(sets);
        viewHolder.repsText.setText(reps);
        viewHolder.weightText.setText(weight);
    }

}

}


person kandroidj    schedule 01.11.2012    source источник
comment
Вы пытались создать свой собственный адаптер (например, хотя бы переопределить getView())?   -  person sandrstar    schedule 01.11.2012
comment
я создал свой собственный класс, который расширяет SimpleCursorAdapter, но не BaseAdapter. я должен это делать?   -  person kandroidj    schedule 01.11.2012
comment
Вы должны иметь возможность использовать Cursor.getPosition, чтобы узнать номер связанной строки. // вы также можете поделиться своим эскизом SimpleCursorAdapter, чтобы люди знали, как вы с ним работаете.   -  person auselen    schedule 01.11.2012
comment
это сработало спасибо. Я опубликую свой код через несколько, можете ли вы отправить это как ответ, чтобы я мог его принять.   -  person kandroidj    schedule 01.11.2012


Ответы (2)


Попробуйте переопределить getview..,.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater=(LayoutInflater)appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView=inflater.inflate(layout, null, true);

    EditText txt=(EditText)convertView.findViewById(R.id.labelNumber);

    txt.settext(position + 1);   //position starts from 0 thats why add 1

    return convertView;
}
person MKB    schedule 01.11.2012
comment
Могу ли я использовать этот метод в простом адаптере курсора? - person kandroidj; 01.11.2012

public class myAdapter extends SimpleCursorAdapter {

//    globle variable

public myAdapter() {
    //constructor
}

@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int arg0) {
    return null;
}
@Override
public long getItemId(int arg0) {
    return 0;
}

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater)appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(layout, null, true);

EditText txt=(EditText)convertView.findViewById(R.id.labelNumber);

txt.settext(position + 1);   //position starts from 0 thats why add 1

return convertView;
}

}

Это полный простой адаптер курсора..,.

person MKB    schedule 01.11.2012
comment
мой код опубликован выше, теперь работает. Я получаю позицию курсора и добавляю единицу к целому числу, чтобы он отображал 1 для начала вместо 0. Спасибо за вашу помощь! - person kandroidj; 01.11.2012