Invité Posté(e) 10 janvier 2011 Share Posté(e) 10 janvier 2011 Bonjour à tous! Je suis en train de développer une application dans laquelle j'utilise une TabActivty. Celle-ci contient 3 onglets (Consultants, Missions, Clients). J'ai également créé une base de données qui contient ma table de consultants, et ma table de clients. Si pour l'affichage d'une liste je n'ai rencontré aucun problème, dès que je veux en afficher deux (une liste dans chaque onglet), là plus rien de s'affiche!! [EDIT] : J'avais oublié de mettre à jour le numéro de version de la base de données. Du coup les deux listview s'affichent, mais elles affichent la même chose ( liste des consultants) [EDIT2] : Bon, j'ai trouvé le problème. Il ne faut pas passer par les classes ConsultantsGroup et ClientsGroup. Il suffit de directement appelé les classes qui créent les listes Voici le code: TabActivity : public class WebGo extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.webgo_layout); Resources res = getResources(); // Resource object to get Drawables TabHost tabHost = getTabHost(); // The activity TabHost TabHost.TabSpec spec; // Resusable TabSpec for each tab Intent intentConsultants; Intent intentMissions; Intent intentClients; // Create an Intent to launch an Activity for the tab (to be reused) intentConsultants = new Intent().setClass(this, ConsultantsGroup.class); // Initialize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("consultants").setIndicator("Consultants", null) .setContent(intentConsultants); tabHost.addTab(spec); // Do the same for the other tabs intentMissions = new Intent().setClass(this, MissionsGroup.class); spec = tabHost.newTabSpec("missions").setIndicator("Missions", null) .setContent(intentMissions); tabHost.addTab(spec); intentClients = new Intent().setClass(this, ClientsGroup.class); spec = tabHost.newTabSpec("clients").setIndicator("Clients", null) .setContent(intentClients); tabHost.addTab(spec); tabHost.setCurrentTab(0); } } ConsultantsGroup: (Ne sert qu'à lancer l'activty ConsultantsList et récupérer sa view) J'ai exactement le même code pour ClientsGroup si ce n'est qu'il lance l'activity ClientsList public class ConsultantsGroup extends ActivityGroup { // Keep this in a static variable to make it accessible for all the nesten activities, lets them manipulate the view public static ConsultantsGroup group; // Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory. private ArrayList<View> history; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.history = new ArrayList<View>(); group = this; // Start the root activity withing the group and get its view View view = getLocalActivityManager().startActivity("ConsultantsList", new Intent(this,ConsultantsList.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView(); // Replace the view of this ActivityGroup replaceView(view); } public void replaceView(View v) { // Adds the old one to history history.add(v); // Changes this Groups View to the new View. setContentView(v); } public void back() { if(history.size() > 0) { history.remove(history.size()-1); setContentView(history.get(history.size()-1)); }else { finish(); } } @Override public void onBackPressed() { ConsultantsGroup.group.back(); return; } } ConsultantsList: public class ConsultantsList extends ListActivity { private static final int ACTIVITY_SHOW_CONSULTANT = 0; private ConsultantsDbAdapter cDbAdapter; private Cursor mConsultansCursor; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); ListView lv = new ListView(ConsultantsList.this); lv.setId(android.R.id.list); // --------> Obligé de mettre cet id sinon on obtient une erreur lv.setDivider(null); lv.setFastScrollEnabled(true); setContentView(lv); // Affichage des consultants sauvegardés en base: cDbAdapter = new ConsultantsDbAdapter(this); cDbAdapter.open(); mConsultansCursor = cDbAdapter.fetchAllConsultants(); Log.i("CONSULTANT LIST", "TEST"); /* mConsultansCursor = cDbAdapter.fetchAllConsultants(); startManagingCursor(mConsultansCursor); */ // On spécifie les éléments que l'on veut afficher dans la liste String[] from = new String[]{ConsultantsDbAdapter.KEY_NOM , ConsultantsDbAdapter.KEY_PRENOM}; // Ici, on spécifie la destination vers laquelle on affichera les éléments sélectionnés ci-dessus int[] to = new int[]{R.id.nom_consultant, R.id.prenom_consultant}; // Now create a simple cursor adapter and set it to display /* SimpleCursorAdapter consultants = new SimpleCursorAdapter(this, R.layout.consultant_row, mConsultansCursor, from, to); */ lv.setAdapter( new MyCursorAdapter( getApplicationContext(), R.layout.consultant_row, mConsultansCursor, from, to)); // MyCursorAdapter consultants = new MyCursorAdapter(this, R.layout.consultant_row, mConsultansCursor, from, to); // setListAdapter(consultants); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Cursor c = mConsultansCursor; c.moveToPosition(position); Intent i = new Intent(this, Consultant.class); i.putExtra(ConsultantsDbAdapter.KEY_ROWID, id); i.putExtra(ConsultantsDbAdapter.KEY_NOM, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_NOM))); i.putExtra(ConsultantsDbAdapter.KEY_PRENOM, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_PRENOM))); i.putExtra(ConsultantsDbAdapter.KEY_ADRESSE, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_ADRESSE))); i.putExtra(ConsultantsDbAdapter.KEY_EMAIL, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_EMAIL))); i.putExtra(ConsultantsDbAdapter.KEY_FONCTION, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_FONCTION))); i.putExtra(ConsultantsDbAdapter.KEY_TELEPHONE, c.getString( c.getColumnIndexOrThrow(ConsultantsDbAdapter.KEY_TELEPHONE))); startActivityForResult(i, ACTIVITY_SHOW_CONSULTANT); } public class MyCursorAdapter extends SimpleCursorAdapter implements SectionIndexer { AlphabetIndexer alphaIndexer; public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); alphaIndexer= new AlphabetIndexer(c, mConsultansCursor.getColumnIndex(ConsultantsDbAdapter.KEY_NOM), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } @Override public int getPositionForSection(int section) { return alphaIndexer.getPositionForSection(section); } @Override public int getSectionForPosition(int position) { return alphaIndexer.getSectionForPosition(position); } @Override public Object[] getSections() { return alphaIndexer.getSections(); } } } De même pour l'activité qui gère la liste des clients: ClientsList: public class ClientsList extends ListActivity { private static final int ACTIVITY_SHOW_CLIENT = 0; private ClientsDbAdapter clDbAdapter; private Cursor mClientsCursor; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); ListView lv2 = new ListView(ClientsList.this); lv2.setId(android.R.id.list); // ----> Toujours obligé de garder cet id , je pense que le problème est ici, mais je ne sais pas comment faire !! lv2.setDivider(null); lv2.setFastScrollEnabled(true); setContentView(lv2); // Affichage des consultants sauvegardés en base: clDbAdapter = new ClientsDbAdapter(this); clDbAdapter.open(); mClientsCursor = clDbAdapter.fetchAllClients(); Log.i("CLIENT LIST", "TEST"); /* mConsultansCursor = cDbAdapter.fetchAllConsultants(); startManagingCursor(mConsultansCursor); */ // On spécifie les éléments que l'on veut afficher dans la liste String[] from = new String[]{ClientsDbAdapter.KEY_NOM}; // Ici, on spécifie la destination vers laquelle on affichera les éléments sélectionnés ci-dessus int[] to = new int[]{R.id.nom_client}; lv2.setAdapter( new MyCursorAdapter( getApplicationContext(), R.layout.client_row, mClientsCursor, from, to)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Cursor c = mClientsCursor; c.moveToPosition(position); Intent i = new Intent(this, Consultant.class); i.putExtra(ClientsDbAdapter.KEY_ROWID, id); i.putExtra(ClientsDbAdapter.KEY_NOM, c.getString( c.getColumnIndexOrThrow(ClientsDbAdapter.KEY_NOM))); i.putExtra(ClientsDbAdapter.KEY_ADRESSE, c.getString( c.getColumnIndexOrThrow(ClientsDbAdapter.KEY_ADRESSE))); i.putExtra(ClientsDbAdapter.KEY_CONTACT, c.getString( c.getColumnIndexOrThrow(ClientsDbAdapter.KEY_CONTACT))); i.putExtra(ClientsDbAdapter.KEY_TELEPHONE, c.getString( c.getColumnIndexOrThrow(ClientsDbAdapter.KEY_TELEPHONE))); startActivityForResult(i, ACTIVITY_SHOW_CLIENT); } public class MyCursorAdapter extends SimpleCursorAdapter implements SectionIndexer { AlphabetIndexer alphaIndexer; public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); alphaIndexer= new AlphabetIndexer(c, mClientsCursor.getColumnIndex(ClientsDbAdapter.KEY_NOM), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } @Override public int getPositionForSection(int section) { return alphaIndexer.getPositionForSection(section); } @Override public int getSectionForPosition(int position) { return alphaIndexer.getSectionForPosition(position); } @Override public Object[] getSections() { return alphaIndexer.getSections(); } } } Je sais que ça fait pas mal de code à étudier, mais un ptit coup de main la dessus m'enlèverait une belle épine du pied !! ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dahevos Posté(e) 12 janvier 2011 Share Posté(e) 12 janvier 2011 J'ai un problème similaire. J'ai 2 onglets et 2 listes à afficher (une dans chaque). Actuellement, quand je clic sur l'onglet 2, j'ai pas de liste dessiné .... Il existe un moyen sans créer plusieurs classes pour faire cela ? (j'aimerai cantonner la gestion des 2 tab a une classe ) ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.