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)