我有这个xml(我不知道它是否完美):
<?xml version="1.0" encoding="UTF-8"?>
<lista>
<riga>
<id>1</id>
<title>Fornace</title>
<thumb_url>http://i43.tinypic.com/29lzjpv.jpg</thumb_url>
<prova>
<title>prova1 - Fornace</title>
</prova>
</riga>
<riga>
<id>2</id>
<title>Basilica</title>
<thumb_url>http://i40.tinypic.com/qs8ihe.jpg</thumb_url>
<prova>
<title>prova2</title>
</prova>
</riga>
<riga>
<id>3</id>
<title>Foro Boario</title>
<prova>
<title>prova3</title>
</prova>
</riga>
</lista>
我想解析它并为单个列表行打开不同的列表。我该怎么办?
MainActivity:
public class Lista extends Activity {
// All static variables
static String convertStreamToString(java.io.InputStream is) {
@SuppressWarnings("resource")
java.util.Scanner s = new
java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
};
// static final String URL = "lista_principale.xml";
// XML node keys
static final String KEY_RIGA = "riga"; // parent node
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_THUMB_URL = "thumb_url";
static final String KEY_PROVA = "prova";
ListView list;
LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista);
的ArrayList&GT; listaElem = new ArrayList&gt;();
XMLParser parser = new XMLParser();
//String xml = parser.getXmlFromUrl(URL); // getting XML from URL
InputStream is = getResources().openRawResource(R.raw.lista_principale);
String xml=convertStreamToString(is);
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_RIGA);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
map.put(KEY_PROVA, parser.getValue(e, KEY_PROVA));
// adding HashList to ArrayList
listaElem.add(map);
}
list=(ListView)findViewById(R.id.list);
// Getting adapter by passing xml data ArrayList
adapter=new LazyAdapter(this, listaElem);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), Lista2.class);
String posto_id = ((TextView) view.findViewById(R.id.title)).getText().toString();
Toast.makeText(getApplicationContext(), "Album Id: " + posto_id , Toast.LENGTH_SHORT).show();
i.putExtra("posto_id", posto_id);
startActivity(i);
}
});
}
}
SingleListActivity
public class Lista2 extends Activity {
String posto_id = null;
LazyAdapter adapter;
static String convertStreamToString(java.io.InputStream is) {
@SuppressWarnings("resource")
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
};
static final String KEY_TITLE = "title";
static final String KEY_PROVA = "prova";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista2);
ArrayList<HashMap<String, String>> listaElem = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
//String xml = parser.getXmlFromUrl(URL); // getting XML from URL
InputStream is = getResources().openRawResource(R.raw.lista_principale);
String xml=convertStreamToString(is);
Intent i = getIntent();
int k=0;
k = i.getIntExtra("posto_id",k);
// i.getStringExtra(posto_id);
Document doc = parser.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(KEY_PROVA);
for (k=0; k< nl.getLength();k++){
HashMap<String, String> map2 = new HashMap<String, String>();
Element f = (Element) nl.item(k);
map2.put(KEY_TITLE, parser.getValue(f, KEY_TITLE));
listaElem.add(map2);
}
// Displaying all values on the screen
ListView lblSong = (ListView) findViewById(R.id.list2);
adapter=new LazyAdapter(this, listaElem);
lblSong.setAdapter(adapter);
}
}