【问题标题】:Identifying items in listview识别列表视图中的项目
【发布时间】:2013-08-02 12:46:39
【问题描述】:

我正在通过SimpleCursorAdapter 从 sqlite 数据库中检索数据,并在ListView 上显示结果。该数据库包含联系信息以及 ID 字符串。我在列表视图项上显示的两个项目是一个人的姓名和他们的电话号码,但我没有显示 ID 字符串 (UUID)。

那么当用户在这个listview中点击一个item时,我们如何识别数据库中对应的行呢?该项目仅包含名称和编号,但不包含 ID 列,这意味着我无法在数据库中找到相应的行。

如何在列表项中不显示长 UUID 字符串的情况下解决此问题?

【问题讨论】:

  • 您是否使用一些自定义适配器来填充 ListView?
  • 发布您如何获取联系信息,您检索哪些数据并将其存储在临时对象中
  • 你可以 setTag(position) 。我建议您应该使用(如果不使用)该 ID。然后,在单击列表项时,getTag() 并向表发起查询。 (如果你觉得困惑,请告诉我。)

标签: android listview


【解决方案1】:

使传递给SimpleCursorAdapter 的光标包含UUID。仅仅因为光标包含 UUID 并不意味着它必须显示它。然后当你得到OnItemClickListener.onItemClick()中被点击的项目的位置时,用Cursor.moveToPosition()将你的光标移动到这个位置,用Cursor.getString()得到UUID。

另一种方式(更优雅)是在传递给 onItemClick 的 AdapterView 上调用 getAdapter(),然后将适配器转换为 CursorAdapter 并在光标适配器上调用 get getItem()。这应该返回设置在指定位置的光标对象。

【讨论】:

    【解决方案2】:

    在您的ListView 的行布局中添加另一个TextView 并使此TextView 不可见。 在初始化您的SimpleCursorAdapter 时,将您从数据库中获取的_id 添加到此TextView。由于此TextView 是不可见的,因此不会显示。

    String[] from = new String[] { "name", "_id" };
    int[] to = new int[] { R.id.name, R.id.your_hidden_textview_id };       
    SimpleCursorAdapter sadapter = new SimpleCursorAdapter(this,
                R.layout.ur_row_layout, ur_cursor, from, to);
    

    在您的OnItemClick ListView 中,只需使用以下代码获取联系人 ID

    public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
    
    TextView contactid = (TextView) view.findViewById(R.id.your_hidden_textview_id);
    String Contact_id = contactid .getText().toString();
    }
    

    【讨论】:

    • 如何使 textview 不可见?
    • 在行布局中为您的 textview 添加 android:visibility="gone"
    【解决方案3】:

    OnItemClickListener 的 onItemClick() 方法将列表中的位置传递给您,Adapter 有一个方法 getItem(int position)。 将 getItem() 的结果转换为 Cursor,这将是您的光标初始化为指向您单击的行,因此您可以获取原始查询中的任何数据,而不管任何视图中的内容。

    例如: cursor.getString(cursor.getColumnIndex("phoneNumber")));

    【讨论】:

      【解决方案4】:
      • 您可以通过自定义适配器将 UUID 保存在与 ListView 连接的数组中
      • 此外,您可以使用 setTag() 将 UUID 传递到自定义适配器中的视图,从而将此 UUID 存储在视图中。

      【讨论】:

        猜你喜欢
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 2023-02-26
        相关资源
        最近更新 更多