如何动态地将行添加到列表视图?

时间:2018-03-31 15:59:05

标签: java android android-layout listview

我是Android Java编程的初学者,我在创建listview时遇到了问题。

我想在每个listview项目中动态添加行。

我的数据来自以下JSON:

{
   "online":"1",
   "success":1,
   "data":[
      {
         "zi":"1",
         "zn":"Zone 1",
         "vannes":[
            {
               "vn":"Value 01",
               "ve":"0",
               "st":"1",
               "es":"1",
               "eo":"0"
            },
            {
               "vn":"Value 02",
               "ve":"0",
               "st":"3",
               "es":"0",
               "eo":"0"
            },
            {
               "vn":"Value 03",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"2",
         "zn":"Zone 2",
         "vannes":[
            {
               "vn":"Value 01",
               "ve":"0",
               "st":"1",
               "es":"1",
               "eo":"0"
            },
            {
               "vn":"Value 03",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            },
            {
               "vn":"Value A",
               "ve":"0",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"3",
         "zn":"Zone 3",
         "vannes":[
            {
               "vn":"Value 01",
               "ve":"0",
               "st":"1",
               "es":"1",
               "eo":"0"
            },
            {
               "vn":"Value B",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"4",
         "zn":"Zone 4",
         "vannes":[
            {
               "vn":"Value B",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"6",
         "zn":"Zone A",
         "vannes":[
            {
               "vn":"Value 01",
               "ve":"0",
               "st":"1",
               "es":"1",
               "eo":"0"
            },
            {
               "vn":"Value 03",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"7",
         "zn":"Zone B",
         "vannes":[
            {
               "vn":"Value A",
               "ve":"0",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      },
      {
         "zi":"5",
         "zn":"Zone Test",
         "vannes":[
            {
               "vn":"Value 02",
               "ve":"0",
               "st":"3",
               "es":"0",
               "eo":"0"
            },
            {
               "vn":"Value 03",
               "ve":"1",
               "st":"3",
               "es":"0",
               "eo":"0"
            }
         ]
      }
   ]
}

我的Java代码如下。 它可能不是很好结构,也不是很干净,但我是初学者....请放纵:-)我只是要求学习改进

zones = jsonObject.getJSONArray(KEY_DATA);

。     for(int i = 0; i< zones.length(); i ++){

    HashMap < String, String > map = new HashMap < > ();
    JSONObject zone = zones.getJSONObject(i);
    final Integer zi = zone.getInt(KEY_ZONE_ID);
    final String zoneName = zone.getString(KEY_ZONE_NAME);

    map.put(KEY_ZONE_ID, zi.toString());
    map.put(KEY_ZONE_NAME, zoneName.toString());

    JSONObject vannes = zones.getJSONObject(i);

    for (int j = 0; j < vannes.length(); j++) {

        JSONArray vannedetail = vannes.getJSONArray(KEY_DATA_VANNES);
        for (int k = 0; k < vannedetail.length(); k++) {
            JSONObject vv = vannedetail.getJSONObject(k);
            final String vanneName = vv.getString(KEY_VANNE_NAME);
            map.put(KEY_VANNE_NAME, vanneName.toString());

        }

    }

    zoneList.add(map);
}

然后这样我设置了我的列表适配器:

ListAdapter adapter = new SimpleAdapter(

        VanneListingActivity.this, zoneList,
        R.layout.list_item,

        new String[] {
                KEY_ZONE_NAME,
                KEY_VANNE_NAME,
        },
        new int[] {
                R.id.zoneName,
                R.id.vanneName,
        });

zoneListView.setAdapter(adapter);

更新: ListView XML:

<ListView
    android:id="@+id/zoneList"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:divider="@android:color/transparent"
    android:paddingTop="4dp"
    android:dividerHeight="6dp"
    android:scrollbars="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">
</ListView>

和list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_background"
android:orientation="vertical"
android:padding="10dp">

<!--hidden values -->
<TextView
    android:id="@+id/zi"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />

<TextView
    android:id="@+id/stationEtat"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />


<TextView
    android:id="@+id/zoneName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:text="Nom de la Zone"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="#ff0000"
    android:textSize="20sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/vanneName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/zoneName"
    android:layout_marginTop="2dp"
    android:layout_marginLeft="10dp"
    android:text="Nom de la vanne"
    android:textColor="#000000"
    android:textSize="14sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/vanneEtat"
    android:layout_width = "match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/zoneName"
    android:layout_marginTop="2dp"
    android:paddingTop="18dp"
    android:layout_marginLeft="20dp"
    android:text="TextView"
    android:textSize="14sp"
    android:textColor="#ea00ff"/>

它有效,我得到以下结果: (紫色文本“ListView”以及我希望显示的其他信息)

结果如下:

Obtained result

我显然得到了循环中的最后一个元素......

但这不是我想要的,这是理想的结果。每个对象的行数取决于我的JSON文件。

这是一个快速编辑,用于解释我正在寻找的结果。

Expected result

我希望我对问题的描述足够清楚。经过对互联网的大量研究,我想我需要动态创建一个listview(没有XML?)但是我真的不知道怎么做。

我希望我已经提供了足够的元素来帮助我。

我面临问题...欢迎所有帮助者:-s

抱歉我的英文不好

1 个答案:

答案 0 :(得分:-1)

refer this example

它很好地解释并满足所有你的要求..如果你仍然有问题..然后让我知道.. 很乐意帮助你。 快乐的编码!