0

单击列表视图时,我在获取正确的 id 值时遇到了一些麻烦。

我制作了一个自定义适配器,因为我从 SQLite 数据中绘制,我得到了正确的文本,但是当我点击一行时,我得到一个 0 索引 id,这不是我想要的。

我也在使用 Sugar ORM,所以我不确定这是否需要我做一些特殊的工作来获取 id 字段。

我不确定我应该在代码方面向您展示什么,所以无论您认为对您有什么帮助,请告诉我,我会发布它。

谢谢

BoardArrayAdapter adapter = new BoardArrayAdapter(this, boards);
setListAdapter(adapter);

ListView lv = getListView();

registerForContextMenu(lv);

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(getApplicationContext(), "Board ID " + id, Toast.LENGTH_SHORT).show();
    }
});
4

2 回答 2

3

您需要覆盖getItemId()适配器中的方法。根据 SugarORM 文档,您可以调用getid()以返回数据库 ID。

ArrayList<Object> data;

    @Override
    public long getItemId(int position) {
        return data.get(position).getid();
    }
于 2015-01-29T03:26:16.023 回答
1

这就是我在项目中使用的方式(使用 SQLite 和 CustomListView)。

获取数据方法

public void getData(View view, long id)
{
    //storing the ID into a public static variable and converting to int
    CLIENTE_ID = (int)id;

    //When the user touches on the field in the listview, I get the touched field's name and email
    TextView textViewnome = (TextView) view.findViewById(R.id.tv_cliente_nome);
    TextView textViewemail = (TextView) view.findViewById(R.id.tv_cliente_email);

    //Stores both name and email of the touched field
    String nome = textViewnome.getText().toString();
    String email = textViewemail.getText().toString();

    //store into static variable
    CLIENTE_NOME = nome;
    CLIENTE_EMAIL = email;
}

在 onCreate 内:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            getData(view, id);
            Log.d("myClass", "ID: " + view.getId());
        }
    });

我希望它有帮助!:)

于 2015-01-29T04:33:25.167 回答