У меня есть приложение, которое получает объявления, хранящиеся в виде 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);
Спасибо за любую помощь!