如何在回收列表项中添加序列号

时间:2016-02-09 06:03:30

标签: android listview android-cursoradapter

我有一个自定义ListView并使用CursorAdapter来公开来自Cursor的数据。我得到的一个挑战是在每个列表项中添加序列号。我知道必须有一个名为“_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

}

问题

直到列表项目第一次填满屏幕,它才能正常工作。但是当我向下滚动时,我上面提到的方式失败了,因为CursorAdapter在滚动时回收它的列表项,并且第一项的序列号变得更高。

问题

  • 在回收列表项中是否还有其他方法可以添加S / N?或者我可以防止这种情况发生在同一个Adapter类。

2 个答案:

答案 0 :(得分:0)

从文档http://developer.android.com/reference/android/widget/CursorAdapter.html#newView%28android.content.Context,%20android.database.Cursor,%20android.view.ViewGroup%29

中挑选
 public abstract View newView (Context context, Cursor cursor, ViewGroup parent)

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

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

答案 1 :(得分:0)

您可以使用Cursor的 public abstract int getPosition()方法。

如需更多参考,请点击here

例如:int rowNum = cursor.getPosition();

注意:在CursorAdapter的 public abstract void bindView(View视图,Context context,Cursor cursor)方法中,游标会自动移动到当前行。 因此,使用游标我们可以获得当前行位置。