#android #listview #arraylist
#Android #listview #список массивов
Вопрос:
Я проанализировал несколько элементов с помощью JSoup, которые я хочу добавить в listview, предпочтительно через arraylist, подобный этому:
End date: 08-10-2012
Left: € 38,50
Кто-нибудь может мне помочь?
Заранее благодарю вас.
Результат JSoup как System.out.println:
End date: // td:eq(0)
Left: // td:eq(0)
08-10-2012 // td:eq(1)
€ 38,50 // td:eq(1)
Мой код:
@Override
protected void onPostExecute(String result) {
//publishProgress(false);
TextView tv = (TextView)findViewById(R.id.lbl_top);
ListView kp = (ListView)findViewById(R.id.kpn);
tv.setText("");
Document doc = Jsoup.parse(kpn);
Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");
for (Element tdFromSecondColumn : tdsFromSecondColumn) {
System.out.println(tdFromSecondColumn.text());
tv.setText(tdFromSecondColumn.text());
//kp.setAdapter(adapter);
}
for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {
System.out.println(tdFromSecondColumn1.text());
}
Редактировать:
@Override
protected void onPostExecute(String result) {
//publishProgress(false);
// create the grid item mapping
ListView kp = (ListView)findViewById(R.id.kpn);
String[] from = new String[] {"col_1", "col_2"};
int[] to = new int[] { R.id.lbl_password, R.id.lbl_result };
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
TextView tv = (TextView)findViewById(R.id.lbl_top);
tv.setText("");
Document doc = Jsoup.parse(kpn);
Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");
for (Element tdFromSecondColumn : tdsFromSecondColumn) {
map.put("col_1", tdFromSecondColumn.text());
fillMaps.add(map);
System.out.println(tdFromSecondColumn.text());
tv.setText(tdFromSecondColumn.text());
//kp.setAdapter(adapter);
}
for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {
map.put("col_2", tdFromSecondColumn1.text());
fillMaps.add(map);
System.out.println(tdFromSecondColumn1.text());
}
SimpleAdapter adapter = new SimpleAdapter(AndroidLogin.this, fillMaps, R.layout.main, from, to);
kp.setAdapter(adapter);
Сбой приложения, Logcat:
ERROR/AndroidRuntime(9105): java.lang.IllegalArgumentException: Object must not be null
Ответ №1:
Вы должны попробовать использовать SimpleAdapter в качестве адаптера списка. Просто сопоставьте значения в вашем arraylist с соответствующими частями представления, которое вы используете для каждой строки в вашем списке. Вот пример использования SimpleAdapter. Вот пример использования адаптера другого типа, ArrayAdapter, который может быть вам еще полезнее.
Комментарии:
1. Привет, Куртис, спасибо за ответ. Можете ли вы привести небольшой пример кода?
2. Вы не видели пример, который я включил в свой ответ, или он был слишком большим?
3. Да, я видел это, но я не понимаю правильно. У меня уже есть некоторый код, пожалуйста, найдите его в моем отредактированном коде. Может быть, вы могли бы это исправить?
4. Теперь я включил еще несколько примеров в свой ответ.
5. Привет, Куртис, я почти на месте, но я не могу скомпилировать, как будто получить сообщение Конструктор SimpleAdapter не определен?? Посмотрите мой отредактированный код.
Ответ №2:
Я также предлагаю SimpleAdapter; посмотрите Этот хорошо сделанный пример, который я использовал, когда мне нужно было изучить этот адаптер.
И вам будет легко повторно использовать код, который вы уже написали, потому что он очень похож.
Комментарии:
1. Привет, Мангусто, спасибо за ответ, я уже нашел его, но в коде SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.grid_item, from, to); я получаю сообщение об ошибке constrcutor undefined. Пожалуйста, посмотрите мой отредактированный код. Вы можете помочь?
2. Попробуйте определить fillMaps как ` ArrayList<HashMap<Строка, строка>> fillMaps = new ArrayList<HashMap<Строка, строка>>(); `
3. Привет, Мангусто, я уже решил это, не должно быть: new SimpleAdapter(this, .., ..), но new SimpleAdapter(AndroidLogin.this, .., ..) Во всяком случае, спасибо.