【问题标题】:Android onItemClick giving Incorrect idAndroid onItemClick给出不正确的ID
【发布时间】:2015-03-01 11:55:39
【问题描述】:

我试图通过查询 SQLite 数据库来获取 ListView 中单击项目的详细信息。我将来自 onItemClick 的长 id 值作为主键传递。但是,long id 与 Table 中的实际主键不匹配。我通过查询表中所有行的主键找到了实际的主键。

我有以下问题: 1.我假设onItemClick(AdapterView parent, View view, int position, long id)中的long id参数是否携带了数据库表中item的主键?

  1. 如果没有,我应该如何获取主键?

我在下面附加了我的代码:

list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            //Display Client Details
            Intent displayclient = new Intent(view.getContext(), display_clientdetails.class);
            Integer db_id = (int) id;

            String TAG = "client_list";
            Log.d(TAG,"Position is" +position +" ID is " +db_id);

            displayclient.putExtra("client_id",db_id);
            view.getContext().startActivity(displayclient);

        }

});

【问题讨论】:

    标签: android sqlite android-listview onitemclick


    【解决方案1】:

    不,你说的不对。如果您使用的是自定义适配器,则应覆盖 getItemId(int position) 以控制并返回您考虑的任何 id。

    我通常使用这样的东西,但这取决于你的主键的类型。您可能还必须覆盖 getItem(int position)。

    @Override
    public long getItemId(int position) {
       return getItem(position).getId();
    }
    

    【讨论】:

    • 在我创建了一个自定义适配器并为 getItemId 方法编写了一个覆盖之后,它对我有用。但是,我还没有理解它起作用的原因。如果您可以分享 getItemId 不返回主键而不被覆盖的原因,那就太好了。谢谢。
    • 那是因为基本函数不知道你用什么作为id。如果它开箱即用,那就太好了,但是考虑到您可以将多少不同和自定义的对象传递给适配器,这似乎很复杂。默认函数返回位置参数,你可以在这里看到:android.googlesource.com/platform/frameworks/base/+/refs/heads/…
    【解决方案2】:

    我有以下问题: 1. 我是否正确假设 onItemClick 中的长 id 参数(AdapterView parent, View view, int position, long id) 携带数据库中item的主键 桌子?

    是的,你错了。 onItemClick 中提供的 id 是适配器的 getItemId 返回的结果。

    【讨论】:

    • 在我创建了一个自定义适配器并为 getItemId 方法编写了一个覆盖之后,它对我有用。但是,我还没有理解它起作用的原因。如果您可以分享 getItemId 不返回主键而不被覆盖的原因,那就太好了。谢谢
    • 在切换到自定义适配器之前您使用的是什么适配器?
    • ArrayAdapter 的 getItemId 返回位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多