单击列表视图时获取ID值

Getting ID value when clicking on listview

我在单击列表视图时无法获取正确的 ID 值。

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

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

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

谢谢

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();
    }
});

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

ArrayList<Object> data;

    @Override
    public long getItemId(int position) {
        return data.get(position).getid();
    }

这就是我在我的项目中使用的方式(使用 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());
        }
    });

希望对您有所帮助! :)