2011-03-15 3 views
2

J'ai implémenté une listview personnalisée avec plusieurs TextViews d'un tutoriel trouvé here et tout fonctionne très bien, mais j'aimerais pouvoir mettre à jour les textviews à la volée avec de nouvelles données . Par exemple, je définis un écouteur de clic sur les éléments de la vue de liste, et une boîte de dialogue s'affiche pour inviter l'utilisateur à entrer des données. Je peux obtenir les nouvelles données en appelant populateList() et mettre à jour le tableau, mais les nouvelles données ne sont pas affichées dans les textviews jusqu'à ce que l'activité soit redémarrée. Comment puis-je dire à simpleAdapter d'obtenir les nouvelles données et de les afficher dès que la boîte de dialogue est fermée?mise à jour listview de simpleAdapter avec de nouvelles données

EDIT: CODE ILLUSTRÉ

En onCreate:

lv = (ListView) findViewById(R.id.list); 
adapter = new SimpleAdapter(
      this, 
      list, 
      R.layout.listtextview, 
      new String[] {"Title","Desc"}, 
      new int[] {R.id.settingsListItem,R.id.settingsListDesc} 
      ); 
    populateList(settingsList, settingsListDetails); 
    lv.setAdapter(adapter); 
    lv.setOnItemClickListener 
     (new OnItemClickListener() 
      { 
       public void onItemClick(AdapterView<?> parent, View  
       view,int position, long id) 
       { 
        if (position == 0) 
             { 
        showDialog(WAKE_TIME); 
        }   
       } 
     }); 

pour faire apparaître la boîte de dialogue:

public Dialog onCreateDialog(int id) 
{ 
    switch(id) { 
     case WAKE_TIME : 

    return new TimePickerDialog(this,WakeTimeSetListener,  
    wakeHour, wakeMinute, false); 
} 

la boîte de dialogue TimePicker où notifyDataSetChanged est appelé:

private TimePickerDialog.OnTimeSetListener WakeTimeSetListener = new  
TimePickerDialog.OnTimeSetListener() 
{ 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
     { 
      wakeHour = hourOfDay;    
      wakeMinute = minute; 

      wakeHourText = Integer.toString(hourOfDay); 
      wakeMinuteText = Integer.toString(minute); 

      String preftime = hourOfDay + ":" + minute; 

      SimpleDateFormat df = new SimpleDateFormat("HH:mm"); 
      SimpleDateFormat dfOut = new SimpleDateFormat("hh:mm a"); 

      try 
      { 
       wakeDate = df.parse(preftime); 
      } 
      catch (ParseException e1) 
      { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 


       populateList(settingsList, settingsListDetails); 

       adapter.notifyDataSetChanged(); 

     } 

Répondre

3

Avez-vous essayé

adapter.notifyDataSetChanged(); 
+0

@slund: yep .... nada .... qu'est-ce que le $ # (#? – dell116

+0

@ dell116 bizarre. Pouvez-vous poster votre code alors. –

+0

@Robby Pond: c'est sale, mais ça s'en vient. – dell116

Questions connexes