您的标题使用简单的 ListView,它是 ListActivity 的一部分。为了用数据填充这个列表,他们使用 SimpleAdapter 填充来自服务器的 JSON 响应。
ListAdapter adapter = new SimpleAdapter(
AlbumsActivity.this, albumsList,
R.layout.list_item_albums, new String[] { TAG_ID,
TAG_NAME, TAG_SONGS_COUNT }, new int[] {
R.id.album_id, R.id.album_name, R.id.songs_count });
适配器中的所有数据取自
albumsList = new ArrayList<HashMap<String, String>>();
这个 ArrayList 由 AsyckTask 中的代码填充: protected String doInBackground(String... args) { // 构建参数列表 params = new ArrayList();
// getting JSON string from URL
String json = jsonParser.makeHttpRequest(URL_ALBUMS, "GET",
params);
// Check your log cat for JSON reponse
Log.d("Albums JSON: ", "> " + json);
try {
albums = new JSONArray(json);
if (albums != null) {
// looping through All albums
for (int i = 0; i < albums.length(); i++) {
JSONObject c = albums.getJSONObject(i);
// Storing each json item values in variable
String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String songs_count = c.getString(TAG_SONGS_COUNT);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_SONGS_COUNT, songs_count);
// adding HashList to ArrayList
albumsList.add(map);
}
}else{
Log.d("Albums: ", "null");
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
您可以直接在代码中添加 JSON 对象,而不要使用来自 Server 的 Prelode。和简单的例子一样:album = new JSONArray(json); // 这是您的 JSON ARRAY 对象。可以从 String 构造
if (albums != null) {
// looping through All albums
for (int i = 0; i < albums.length(); i++) {
JSONObject c = albums.getJSONObject(i);
// Storing each json item values in variable
String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String songs_count = c.getString(TAG_SONGS_COUNT);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_SONGS_COUNT, songs_count);
// adding HashList to ArrayList
albumsList.add(map);
}
}else{
Log.d("Albums: ", "null");
}
更新:如果您单击第一个列表(专辑)中的项目,您将调用新活动并在那里传递专辑 ID
Intent i = new Intent(getApplicationContext(), TrackListActivity.class);
// send album id to tracklist activity to get list of songs under that album
String album_id = ((TextView) view.findViewById(R.id.album_id)).getText().toString();
i.putExtra("album_id", album_id);
startActivity(i);
我认为在这个 Activity 中,他们再次从服务器执行 AsyncTask 查询,并获得另一个 JSON,其解析方式与第一个 Activity 相同。
如果您在 TrackerActivity 中单击 SONG,您将使用这首歌的详细信息启动新活动。
更新 2:
在服务器端,您需要组织 JSON Oblect 生成器:
- 专辑列表(示例)
- 专辑歌曲(示例)
- 歌曲ditail(示例)