android - 如何使用 BaseAdapter 从 sqlite 获取 ItemID?

标签 android sqlite listview baseadapter

我的 sqlite 列是这样定义的:

public final static String S_ID = "_ID"; 
public final static String S_PHOTOPATH = "Photopath";
public final static String S_NAME = "Name"; 
public final static String S_POS = "Pos";
public final static String S_SCORE = "Score"; 
public final static String S_FIXED = "Fixed"; 

我想从带有适配器类的 sqlite 帮助程序类中获取 ItemID 扩展 BaseAdapter。这是我的代码:

public class Page1ListAdapter extends BaseAdapter {

    private LayoutInflater adapterInflater;
    public Cursor mCursor;
    TagView tag;

    public Page1ListAdapter(Context context, Cursor cursor) {
        super();
        mCursor = cursor;

        adapterInflater=LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mCursor.getCount();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            tag = new TagView();
            convertView = adapterInflater.inflate(R.layout.page1listview_item, null);
            tag.imgV = (ImageView) convertView.findViewById(R.id.ItemImage); 
            tag.titleV = (TextView) convertView.findViewById(R.id.ItemTitle); 
            tag.descriptionV = (TextView) convertView.findViewById(R.id.ItemText);
            convertView.setTag(tag);
        } else {
            tag = (TagView) convertView.getTag();
        }
        mCursor.moveToPosition(position);
        Bitmap bmp = BitmapFactory.decodeFile(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_PHOTOPATH)));
        BitmapDrawable bmpDrawable = new BitmapDrawable(getActivity().getResources(), bmp);
        tag.imgV.setBackground(bmpDrawable);
        tag.titleV.setText(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_NAME)));         
        tag.descriptionV.setText(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_POS)));

        return convertView;
    }

    @Override
    public Object getItem(int position) {
        return position;            
    }

    @Override
    public long getItemId(int position) {
        Log.i("mCursor.getCount() --->", String.valueOf(mCursor.getCount()));
        mCursor.move(position);     
        long id = mCursor.getLong(0); // <--- error here
        return id; 
    }

    public void setTag (Drawable dwb, String title, String description) {
        tag.imgV.setBackground(dwb);
        tag.titleV.setText(title);
        tag.descriptionV.setText(description);
    }
}

但是,getItemID() 总是得到错误或错误的 ID。

如何使用游标获取 _ID 列值?

提前致谢!

最佳答案

Cursor.move()按相对量移动光标。你想要一个绝对位置,使用 moveToPosition()相反。

关于android - 如何使用 BaseAdapter 从 sqlite 获取 ItemID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217520/

相关文章:

android - 如何创建 SimpleFragmentPageAdapter 到 getResources().getString() 的上下文?

android - 如何在 ListView 中设置 RatingBar 的样式? (API 21 和低版本中的问题)

android - retrofit2 从mysql中获取数据并显示在listview上

android - 如何将 android 应用程序流量转换为代理和解密 TLS 流量?

java - AndroidPlot - 使图形与 x 轴标签一起滚动

ios - 重建 sms.db

asp.net - 使用 SQLite 数据库在 azure 上发布时出现 "Entity framework SQL Script generation failed"错误

python - ListView django 中的额外 "row-level"数据

Android SQLite 导致崩溃

python - 如何使用带有参数化占位符的 sqlite3 Python 库创建 SQLite 表?