phoenxior 2015-10-09 05:23 采纳率: 0%
浏览 2270

Android ListView通过Cursor获取数据问题

一个便签应用,实现了基本的功能,现在就是Cursor获取数据看不懂,先简单说说几个相关的文件。
NoteListActivity在onCreate中绑定了一个NoteListAdapter,此Adapter的bindView代码如下:

 @Override
    public void bindView(View view, Context context, Cursor cursor) {
        if (view instanceof NotesListItem) {
            NoteItemData itemData = new NoteItemData(context, cursor);
            ((NotesListItem) view).bind(context, itemData, mChoiceMode,
                    isSelectedItem(cursor.getPosition()));
        }
    }

NoteItemData类的构造函数中有一句是(其中静态常量TYPE_COLUMN=9):

 mType = cursor.getInt(TYPE_COLUMN);

NotesListItem类继承自LinearLayout,其中bind方法部分代码如下:
这部分功能是,长按Item时,右边会出现CheckBox选择后可以进行删除操作,不知道if语句里面**为什么长按时data.getType() = Notes.TYPE_NOTE(Notes.TYPE_NOTE是常量0)?**

 public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) {
        if (choiceMode && data.getType() == Notes.TYPE_NOTE) {
            mCheckBox.setVisibility(View.VISIBLE);
            mCheckBox.setChecked(checked);
        } else {
            mCheckBox.setVisibility(View.GONE);
        }

NoteItemData的getType()方法如下:

 public int getType() {
        return mType;
    }

NoteItemData还有一个方法是getNoteType:

 public static int getNoteType(Cursor cursor) {
        return cursor.getInt(TYPE_COLUMN);
    }

这两个方法的内容是一样的,为什么getNoteType=1,getType在长按时=0,否则=1?
在线等高手回答,研究了好几天了

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 11:01
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    首先,你需要确保你在调用bindView()方法之前已经初始化了Cursor对象。这通常意味着你已经在调用setContentView(R.layout.activity_note_list)之后做了这个操作。

    然后,在你的NoteItemData类中,你可以尝试使用getCursor()方法来获取当前的Cursor对象,然后再使用它来调用getInt()方法。这样就可以避免直接调用cursor.getInt(),因为这是在获取Cursor对象的方法中进行的。

    以下是一个示例,展示了如何在bindView()方法中正确地处理Cursor对象:

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // ...
    
        if (view instanceof NotesListItem) {
            NoteItemData itemData = new NoteItemData(context, cursor);
            ((NotesListItem) view).bind(context, itemData, mChoiceMode,
                    isSelectedItem(cursor.getPosition()));
    
            // 获取当前的Cursor对象
            Cursor c = itemData.getCursor();
    
            // 从Cursor中获取类型信息
            int type = c.getInt(c.getColumnIndexOrThrow(NoteItemData.TYPE_COLUMN));
            
            // 如果type等于0,那么就设置为1
            if(type == 0){
                setChecked(true); // 设置为选中状态
            }
    
            // 释放Cursor资源
            c.close();
        }
    }
    

    这段代码会确保你在调用bindView()方法之前已经初始化了Cursor对象,并且在调用getCursor()方法之前,你已经获得了正确的Cursor对象。这样,你就能够正确地根据Cursor中的数据来更新UI组件的状态。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀