Самым простым решением, вероятно, является замена ArrayAdapter
и android.R.layout.simple_list_item_1
, которые вы используете, предопределенным макетом SimpleAdapter
и android.R.layout.simple_list_item_2
.Этот макет состоит из двух TextView
с идентификатором android.R.id.text1
("элемент") и android.R.id.text2
("подпункт") соответственно, которые вам понадобятся в качестве ссылки для SimpleAdapter
дляwork.
Посмотрев на конструктор для SimpleAdapter
, вы заметите, что, кроме экземпляра Context
и идентификатора ресурса макета, он принимает три параметра, которые могут бытьновое для вас:
- экземпляр
List<? extends Map<String, ?>>
, в который вы помещаете элементы, которые вы хотите ListView
показать.Элементы имеют форму Map
, то есть что-то похожее на структуру, состоящую из свойств в форме пар имя / значение.Например, вы можете использовать "title"
и "date"
в качестве ключей для заголовка и даты каждого элемента RSS, соответственно. - массив строк, в которые следует помещать имена ключей в каждой карте, котораявы хотите показать на
ListView
. - массив целых чисел, где вам нужно поместить идентификаторы частей в представлении элемента списка, где вы хотите, чтобы отдельные элементы ссылались на ключи в предыдущем массивеСтроки, которые будут показаны.Например, если вы хотите отобразить заголовок и дату элемента RSS в представлениях «item» и «sub item» соответственно, вы используете
new String[] { "title", "date" }
в качестве аргумента массива строк и new int[] { android.R.id.text1, android.R.id.text2 }
в качестве этого аргумента.
Пример грубого кода, просто чтобы дать вам идею:
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
for (RSSItem item : feed.getAllItems()) {
Map<String, String> datum = new HashMap<String, String>(2);
datum.put("title", item.getTitle());
datum.put("date", item.getDate().toString());
data.add(datum);
}
SimpleAdapter adapter = new SimpleAdapter(this, data,
android.R.layout.simple_list_item_2,
new String[] {"title", "date"},
new int[] {android.R.id.text1,
android.R.id.text2});
itemList.setAdapter(adapter);
В документации говорится, что «карты содержат данные для каждой строки и должны включать все указанные записив параметре from ", поэтому всегда должны присутствовать как заголовок, так и дата.
Обратите внимание, что все это не в моей голове.На самом деле я не тестировал весь код, так что вы вполне можете столкнуться с какой-то изюминкой или ошибкой, которую вам нужно исправить или исправить на своем пути.