Android 如何在回收清单项目中添加序列号

Android 如何在回收清单项目中添加序列号,android,listview,android-cursoradapter,Android,Listview,Android Cursoradapter,我有一个自定义的ListView,并使用CursorAdapter从游标公开数据。我遇到的一个挑战是在每个列表项中添加序列号。我知道必须有一个名为“_id”的列,它是一个主字段 我能做的是通过抓取“_id”列的值来添加序列号,但这是不可能的,因为我以降序显示了所有数据 我尝试的另一种方法是声明一个变量,并在每次创建项时添加1 我的Adapter类扩展了CursorAdapter public class BalanceInfoAdapter extends CursorAdapter {

我有一个自定义的
ListView
,并使用
CursorAdapter
从游标公开数据。我遇到的一个挑战是在每个列表项中添加序列号。我知道必须有一个名为“_id”的列,它是一个主字段

我能做的是通过抓取“_id”列的值来添加序列号,但这是不可能的,因为我以降序显示了所有数据

我尝试的另一种方法是声明一个变量,并在每次创建项时添加1

我的
Adapter
类扩展了
CursorAdapter

public class BalanceInfoAdapter extends CursorAdapter {

    Context context;
    List<Balance> listOfBalance;

    int serialNo = 0; //Declared as field

   //Some constructers to initialise fields

@Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        serialNo+=1; //Added +1 to the variable

        return LayoutInflater.from(context).inflate(
                R.layout.myLayout, parent, false);
    }

@Override
    public void bindView(View view, Context context, Cursor cursor) {

      mySerialNumberTextView.setText(String.valueOf(serialNo)); //Shown Serial Number in a TextView of List Item

}
公共类BalanceInfoAdapter扩展游标适配器{
语境;
平衡表;
int serialNo=0;//声明为字段
//一些构造函数初始化字段
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
serialNo+=1;//将+1添加到变量中
从(上下文)返回。充气(
R.layout.myLayout,父级,false);
}
@凌驾
公共void bindView(视图、上下文上下文、光标){
mySerialNumberTextView.setText(String.valueOf(serialNo));//在列表项的TextView中显示序列号
}
问题

在列表项第一次出现在屏幕上之前,它工作得很好。但当我向下和向上滚动时,我上面提到的方法失败了,因为
CursorAdapter
在滚动时会回收列表项,并且第一项的序列号会变得更高

问题

  • 是否有其他方法在回收列表项中添加序列号?或者我可以防止在同一
    适配器
    类中发生这种情况

从文档中提取

光标-从中获取数据的光标。光标已移动到正确的位置


所以这里的游标已经位于正确的位置。所以您可以使用cursor.getPosition()方法来获取正确的序列号。

您可以使用游标的公共抽象int getPosition()方法

有关更多参考,请单击

例如:int rowNum=cursor.getPosition()

注意:在公共抽象void bindView(视图视图、上下文上下文、光标)CursorAdapter方法中,光标自动移动到当前行。
所以,使用游标我们可以得到当前行的位置。

为什么排序会导致使用sqlite _id字段出现问题?即使在查询中进行排序,也可以使用_id。_id不会影响任何内容。但是我以降序方式将列表与另一列一起公开。然后_id列的数据将是随机的,在这种情况下不可用d列永远不会是随机的。你为什么会这样想?Sqlite为每行分配的列ID永远不会改变。如果你按其他字段排序,它们就不会按顺序出现。@DougStevenson我试图告诉你同样的情况。是的,它们不会按顺序出现。getPosition只返回当前行相对于cur的位置租金数据集。随着项目的添加和删除,这可能会在不同的查询中发生变化。我不清楚OP是否需要这种行为。
 public abstract View newView (Context context, Cursor cursor, ViewGroup parent)