Прикрепление ID данных к элементам listview

У меня есть приложение, которое получает объявления, хранящиеся в виде xml-файлов на сервере, и загружает название и автора каждого объявления в элемент ListView. Мне также нужно хранить в каждом элементе ID каждого объявления, но на самом деле мне не нужно его отображать. Я подумал о том, чтобы хранить ID в хэш-карте, которую я использую для заполнения списка, а затем находить связанный ID с названием по щелчку мыши, но я думаю, что это было бы небезопасно, поскольку два объявления могут иметь одинаковое название (а также автора и дату). Я также думал о добавлении невидимого TextView к каждому элементу для хранения ID, но это вызывало проблемы с компоновкой. Наконец, я поискал и нашел setTag() и getTag(), которые, как мне кажется, идеально подходят для того, что я хочу сделать, но я не совсем уверен, как использовать их с SimpleAdapter (я относительно новичок в этом...). Если идея TextView - это то, что мне нужно (хотя я сомневаюсь в этом), вот макет, который я использую для каждого элемента:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
      android:id="@android:id/text1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginLeft="6dip"
      android:textAppearance="?android:attr/textAppearanceMedium"/>
    <LinearLayout 
        android:orientation="horizontal"
        android:id="@+id/items"
        android:weightSum="100"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
          android:id="@android:id/text2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginLeft="6dip"
          android:textAppearance="?android:attr/textAppearanceSmall"
          android:layout_weight="85"/>
        <LinearLayout 
            android:orientation="vertical"
            android:id="@+id/itemCB"
            android:layout_weight="15"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center">
            <CheckBox
                android:id="@+id/cbSelected"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

И я использую следующий адаптер для заполнения списка:

for(int i = 0; i < ann.length; i++)
{
    map = new HashMap<String, String>();
    map.put("line1", ann[i].getTitle());
    map.put("line2", "Posted by: " + ann[i].getAuthor() + "\n" + ann[i].date.toLongString());
    list.add(map);
}
String[] from = { "line1", "line2"};

int[] to = { android.R.id.text1, android.R.id.text2};

SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.twoline_checkbox_id_listitem, from, to);
setListAdapter(adapter);

Спасибо за любую помощь!

7
задан lancex 30 December 2011 в 01:53
поделиться