Riempire una ListView Android da XML
Abbiamo visto come riempire una ListView in Android con dati in formato JSON.
Oggi vediamo come fare la stessa cosa usando l'altro formato principe per strutturare i dati: XML.
Qua useremo una Activity invece di un Fragment, ma cambia relativamente poco.
Partiamo dalla Activity:
public class MainActivity extends ListActivity {
private ArrayList list;
private ArrayAdapter adapter;
private ReadXml rx;
private ListView lv;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = getListView();
rx = new ReadXml();
setLista();
}private void setLista() {
try {
list = rx.readClienti(getApplicationContext(), Environment.getExternalStorageDirectory() .getAbsolutePath() + File.separator + "dati.xml" ;
} catch (IOException e) {
} catch (SAXException e) {
} catch (ParserConfigurationException e) {
}
adapter = new ArrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);}
}
Abbiamo un metodo setLista che si occupa di riempire la ListView.
In questo caso abbiamo usato una delle ListView di default (simple_list_item_1); questo il layout applicato:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" ><ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip" >
</ListView></LinearLayout>
A questo punto vediamo la classe ReadXml, che si prende in carico il file di cui fare il parsing:
public class ReadXml {
public ArrayList readClienti(Context context, String file)
throws SAXException, IOException, ParserConfigurationException {
File f = new File(file);
ArrayList list = new ArrayList();
list.clear();
if (f.exists()) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(f);
document.getDocumentElement().normalize();
NodeList nodeList = document.getElementsByTagName("cliente");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
StringBuilder sb = new StringBuilder();
sb.append(
element.getElementsByTagName("codice").item(0)
.getTextContent())
.append("\n")
.append(element
.getElementsByTagName("ragione_sociale")
.item(0).getTextContent())
.append("\n")
.append(element.getElementsByTagName("mnemonico")
.item(0).getTextContent())
.append("\n")
.append(element.getElementsByTagName("indirizzo")
.item(0).getTextContent())
.append("\n")
.append(element.getElementsByTagName("telefono")
.item(0).getTextContent())
.append("\n")
.append(element.getElementsByTagName("email")
.item(0).getTextContent());
list.add(sb.toString());
}
}
}
return list;
}}
La modalità che ho usato qui non è il massimo, nel senso che sarebbe stato meglio suddividere i vari campi invece di usare un unico campo con uno StringBuilder; ma nel mio caso mi bastava fare così.
Enjoy!
java android listview activity fragment stringbuilder json xml simple_list_item_1
1 Commenti
Mi è stata molto utile questo articolo. Ho un problema però, vorrei leggere i dati da un file xml che si trova online e visualizzarli in una listaview. Per caso potresti aiutarmi? Grazie
12/11/2014