Создайте список массивов и добавьте элементы в Listview

#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, .., ..) Во всяком случае, спасибо.