Aller au contenu

ListView avec tableau multidimensionnel


pandore

Recommended Posts

Posté(e)

Bonsoir.

Pour un besoin ponctuel je me suis lancé il y a quelques jours dans le dev Android.

Je me suis fait quelques tests mais je n'arrive pas à faire ce que je veux.

Pour le moment j'ai fait ça :

package com.jtest.android;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class JtestActivity extends ListActivity {
private ListView list;
private String[] names = {"name1", "name2", "name3", "name4", "name5", "name6", "name7", "name8", "name9", "name10", "name11"};
@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	list = (ListView) this.findViewById(android.R.id.list);
	ArrayAdapter<String> ada = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
	list.setAdapter(ada);
	list.setTextFilterEnabled(true);
	list.setClickable(true);
	list.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Builder builder = new AlertDialog.Builder(JtestActivity.this);
   builder.setMessage((String) list.getItemAtPosition(position));
   builder.show();
  }
 });
}
}

Dans ce test je cherche à afficher les noms dans une liste et afficher le nom correspondant en cliquant dessus.

Jusqu'ici pas de problème (enfin j'espère ^^).

Dans un premier temps ce que je voudrais c'est afficher les noms dans une liste et afficher le prénom. Il me faut donc un tableau à 2 dimensions.

Après il faudra que je stocke/récupère ces données dans une base mais ce sera pour plus tard :)

Si quelqu'un pouvait m'aiguiller je serais très content =)

Posté(e)

Au lieu d'utiliser un ArrayAdapter, utilise un SimpleAdapter auquel tu passeras une List de Map, chaque map représentant un élément de ta liste, avec différentes valeurs associées à des clefs. Lors de la construction de l'Adapter, tu indiques quelles clefs sont associées à quels "champs" de la vue d'un élément de la liste

Un peu de code vaut mieux qu'un long discours...

private ListView list;
private List<Map<String, String>> persons = new ArrayList<Map<String,String>>();

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	populateData();

	list = (ListView) this.findViewById(android.R.id.list);
	SimpleAdapter adapter = new SimpleAdapter(this, persons,
						   android.R.layout.simple_list_item_1,
						   new String[]{"name"}, new int[]{android.R.id.text1});
	list.setAdapter(adapter);
	list.setTextFilterEnabled(true);
	list.setClickable(true);
	list.setOnItemClickListener(new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> a, View v, int position, long id) {
			 Builder builder = new AlertDialog.Builder(MyListActivity.this);
			 Map<String,String> item = (Map<String,String>)list.getItemAtPosition(position);
			 builder.setMessage(item.get("surname"));
			 builder.show();
		}
	   });

}

private void populateData() {
 for (int i=1; i<12; i++) {
	 Map<String, String> person = new HashMap<String, String>();
	 person.put("name", "name" + i);
	 person.put("surname", "surname" + i);
	 persons.add(person);
 }
}

Et quand tu passeras à la base de données, tu as SimpleCursorAdapter pour faire la même chose à partir d'une base de données

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...