Actualiser la ListView de ArrayAdapter
Je suis en utilisant ArrayAdapter
de lier les données de mon ArrayList
à mon ListView
et j'utilise un AlertDialog
pour insérer des données dans ma Arraylist
. Mon problème est que je n'arrive pas à actualiser mon ListView
après les changements effectués.
Code
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.config_hidden);
listView=(ListView) findViewById(R.id.hiddenList);
xmlFileManager=new XmlFileManager(this);
addNumber=(Button) findViewById(R.id.addNum);
addNumber.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
LayoutInflater factory = LayoutInflater.from(HiddenCall.this);
final View alertDialogView = factory.inflate(R.layout.add_number, null);
AlertDialog.Builder adb = new AlertDialog.Builder(HiddenCall.this);
adb.setView(alertDialogView);
adb.setTitle(R.string.dialog_title);
adb.setIcon(R.drawable.phone);
final AlertDialog alertDialog = adb.create();
adb.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
numberToAdd=(EditText) alertDialogView.findViewById(R.id.numberToAdd);
String number = numberToAdd.getText().toString();
if(number.length()>0){
xmlFileManager.addNumberToXml(number , HIDDEN_NUMBER_TYPE);
adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, xmlFileManager.getHiddenNumbers());
adapter.setNotifyOnChange(true);
adapter.notifyDataSetChanged();
}
} });
adb.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
} });
adb.show();
}
});
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, xmlFileManager.getHiddenNumbers());
adapter.notifyDataSetChanged();
adapter.setNotifyOnChange(true);
listView.setAdapter(adapter);
}
pourquoi êtes-vous créer une nouvelle carte à chaque fois au lieu de modifier l'existant? vos appels vers notifyDataSetChanged() sont inutiles si vous venez de créer la carte..
Une autre chose que je vois que vous êtes absent est la valeur de la carte à la liste...
J'ai posté le code, j'espère que ça aide. Vous avez encore le besoin d'ajouter une sorte de setter à la carte et d'y passer la mise à jour des données.
Une autre chose que je vois que vous êtes absent est la valeur de la carte à la liste...
J'ai posté le code, j'espère que ça aide. Vous avez encore le besoin d'ajouter une sorte de setter à la carte et d'y passer la mise à jour des données.
OriginalL'auteur 113408 | 2012-08-02
Vous devez vous connecter pour publier un commentaire.
Vous êtes l'instanciation d'un nouvel adaptateur à chaque fois. Ce que vous avez à faire est de mettre la ligne où vous créez une instance de l'adaptateur avant l'écouteur de clics, et dans l'écouteur de clics de modifier cette carte et appel notifyDataSetChanged() sur celui-ci. Bien sûr, vous devez ajouter quelques organismes de normalisation pour votre carte afin de modifier les données.
Doit ressembler à ceci:
avoir de la méthode
setData
Ah, oui, vous avez réellement n'avez pas à mettre les données dans le ArrayAdapter. Il devrait être suffisant pour mettre à jour le sous-jacent tableau, qui vous font déjà
addNumberToXml()
. Il suffit donc de retirer le setData() de la ligne. Dites-moi si cela fonctionne.Je suppose que les numéros cachés tableau passé à la xmlFileManager est toujours le même. Si l'instance est créée à nouveau les modifications ne seront pas remarqué par la carte.
J'ai essayé d'appeler
notifyDataSetChanged
mais il semble qu'il ne prenne pas le changement en considération. Pour résoudre ce problème j'ai préféré créer unListAdapter
qui s'étendBaseAdapter
et maintenant ça fonctionne. Merci pour votre réponse .OriginalL'auteur Ixx
Si vous avez une petite liste de tableaux, afin de forcer la mise à jour d'une liste lorsque la liste de tableaux changements que vous pouvez utiliser ce bout de code:
OriginalL'auteur Miguel Risco-Castillo
Chaque clic, vous pouvez créer un nouvel adaptateur. Vous n'avez pas besoin de le faire. Vous pouvez modifier l'adaptateur de données et d'appel notifyDataSetChanged(). Dans votre cas, vous devez appeler listView.setAdapter(adapter) dans le onClick méthode.
C'est ce que je suis en train de dire, de créer et de définir une fois, et de modifier en onClick() (et appel notifyDataSetChanged()).
OriginalL'auteur Georgy Gobozov
À l'intérieur de votre
adb.setPositiveButton()
'sonClick()
, vous ne devez pas créer une nouvelle carte. Supprimez cette ligne:Simplement faire ceci:
OriginalL'auteur garbagecollector