【问题标题】:Trouble to fill listview correctly无法正确填写列表视图
【发布时间】:2011-10-22 09:00:51
【问题描述】:

我从网上获取了一些数据,这些数据在 AsyncTask 中使用 JSoup 进行解析。

我无法正确填写列表视图。

Edit1 仅填充空字段 (..),最后一行的值为 € 0,00。 Edit2 根本没有被填满。

..         edit2Text
..         edit2Text
..         edit2Text
€ 0,00     edit2Text
€ 0,00     edit2Text

两个编辑都在 test.xml 中:

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

<EditText
    android:inputType="textMultiLine"  
    android:id="@+id/editText1"  
    android:layout_height="wrap_content"  
    android:text="edit1"  
    android:layout_width="200dp"
/>

<EditText
    android:layout_height="wrap_content"  
    android:layout_width="110dp"  
    android:id="@+id/editText2"  
    android:text="edit2" 
    android:inputType="textMultiLine" 
    android:layout_marginLeft="10dp"
/>

</LinearLayout>

列表视图应如下所示:

Einddatum contract: 08-10-2012
Prijs per maand: € 38,50 /mnd
...

我捕获 map 和 map1 以查看它们是否正确填充,它们是否正确填充,我做错了什么?

10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Einddatum contract:}
10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Prijs per maand:}
10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Einddatum contract:}
10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Prijs per maand:}
10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Nieuw beltegoed:}
10-22 10:35:21.698: I/System.out(8132): Hashmap: {col_1=Tegoed vorige periode:}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=Tegoed tot 09-11-2011:}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=Verbruik sinds nieuw tegoed:}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=Ongebruikt tegoed:}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=Verbruik boven bundel:}
10-22 10:35:21.708: I/System.out(8132): Hashmap: {col_1=Verbruik dat niet in de bundel zit*:}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=08-10-2012}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 38,50 /mnd}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=08-10-2012}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 38,50 /mnd}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 54,64}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 17,28}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 71,92}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 5,32}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 66,60}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 0,00}
10-22 10:35:21.718: I/System.out(8132): Hashmap1: {col_2=€ 0,00}

我的代码:

@Override 
    protected void onPostExecute(String result) { 
        // 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.editText1, R.id.editText1 };

        List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        HashMap<String, String> map1 = new HashMap<String, String>();


        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("Hashmap: " + map);

        } 
        for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {
            map1.put("col_2", tdFromSecondColumn1.text());
            fillMaps.add(map1);

            System.out.println("Hashmap1: " + map1);
        }

        SimpleAdapter adapter = new SimpleAdapter(AndroidLogin.this, fillMaps, R.layout.test, from, to); 
        kp.setAdapter(adapter);

【问题讨论】:

  • 正确查看此代码行,您的代码行是否相同 - int[] to = new int[] { R.id.editText1, R.id.editText2 };
  • 查看我编辑的答案,然后尝试这段代码,目前在我看来,我只有这个想法,从其他两个列表中创建新列表并将其传递给适配器。如果它是正确的,那么请接受正确的答案,并为您和其他用户投票。
  • 试试下面的代码,我修改了。

标签: android android-asynctask android-listview jsoup simpleadapter


【解决方案1】:

试试这个,

@Override 
    protected void onPostExecute(String result) { 
        // 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.editText1, R.id.editText2 };

        List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
        List<HashMap<String, String>> fillMaps1 = new ArrayList<HashMap<String, String>>();
          List<HashMap<String, String>> fill_Maps = new ArrayList<HashMap<String, String>>();

 HashMap<String, String> map;
 HashMap<String, String> map1;


        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 = new HashMap<String, String>();
                  map.put("col_1", tdFromSecondColumn.text()); 
            fillMaps.add(map);

            System.out.println("Hashmap: " + map);

        } 
        for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {
                           map1 = new HashMap<String, String>();                                      map1.put("col_2", tdFromSecondColumn1.text());
            fillMaps1.add(map1);

            System.out.println("Hashmap1: " + map1);
        }

                        for (int i=0;i<fillMap.size();i++) {

               fill_Map.add(fillMap.get(i));
               fill_Map.add(fillMap1.get(i));
}
        SimpleAdapter adapter = new SimpleAdapter(AndroidLogin.this, fill_Map, R.layout.test, from, to); 
        kp.setAdapter(adapter);

让我知道发生了什么..

【讨论】:

  • 嗨,谢谢回复。我尝试了你的代码,但现在 edit1 填充了 map1 值,即 08-10-2012,€ 38,50 /mnd 等。Edit2 仍然是空的..
  • 正确查看此代码行,您的代码行是否相同 - int[] to = new int[] { R.id.editText1, R.id.editText2 };
  • 嗯,好的,试过了。我们快到了,edit1 被“map”项正确填充,edit2 也被“map1”项填充,但它们彼此不匹配。 edit2 中的 map1 项目开始于 edit1 中的地图项目结束。
  • 好吧,因为,fillMaps.add(map);和 fillMaps.add(map1);在这里,您首先通过地图项然后 map1 项填充列表,所以像 fillMaps.add(map); fillMaps.add(map1);在一个 for 循环中,因此您的列表包含替代值,例如 map,map1,map,map1......
  • 好的,有道理,但据我所知,我不能将两个 for 循环结合起来。你能举例说明你的意思吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多