1

我有一个 ListView,它使用 SimpleCursorAdapter 从 sqlite 读取数据,该表大约有 1000 行,但我已经按日期过滤了我的 Activity 中的列表,所以过滤后的光标包含那个特殊日子的 2 行。因此我想添加一个自定义行号(不能使用 _id)作为我的列表。我一直在讨论的一个解决方案是 ViewBinder,这是我的代码:

adapter.setViewBinder(new ViewBinder() {
    public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) {
        if (aColumnIndex == 0) {
            aCursor.moveToFirst();
            if(aCursor.moveToFirst()) {
                TextView textView = (TextView) aView;
                textView.setText("" + WeeklyListRowNumber);
                WeeklyListRowNumber = WeeklyListRowNumber + 1;
            }
            return true;
        }
        return false;
    }
});

我的列表中有 11 列,并且 WeeklyListRowNumber 在顶部初始化为 1,我的问题是我的行号变为 7,8 但它必须是 1 、 2。有人可以告诉我如何解决这个问题吗?

4

3 回答 3

1

由于您正在将适配器用于列表视图,因此您可能会在 getview 中获取位置变量。使用该位置 (int) 作为自定义列表行号,它将从零 (0) 开始。

根据需求设置...

于 2013-01-05T12:51:53.307 回答
1

最后我用 ViewBinder 解决了我的问题:

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

        public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) {
            if (aColumnIndex == 0) {
                    TextView textView = (TextView) aView;
                    int CursorPos = aCursor.getPosition() + 1;
                    textView.setText(Integer.toString(CursorPos));

                return true;
             }

            return false;
        }});
于 2013-01-06T12:23:53.160 回答
1
public View getView(int position, View convertView, ViewGroup parent) {
        View retval = null;

            retval = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.content, null);

            title = (TextView) retval.findViewById(R.id.contactName);
            number = (TextView) retval.findViewById(R.id.contactNumber);
            title.setText(text to display in list);
            number.setText(""+position);//add row number to list //fixed the variable
        }
于 2013-01-07T04:55:17.203 回答