Ich habe wenig Probleme mit meinem Adapter. Nachdem ich neuen Inhalt zu meiner Liste hinzugefügt und mit notifyDataSetChanged
aktualisiert habe, funktioniert die onClickListener
nicht für diesen neuen Artikel. Nachdem ich zurück geklickt habe und zum Menü "Hinzufügen" zurückgekehrt bin, funktioniert das Element einwandfrei.Android Adapter notifyDataSetChanged funktioniert nur beim Laden (zweiter Adapter)
So funktioniert der Ladeteil perfekt.
Der erste Adapter mit Liste funktioniert perfekt. Es ist fast derselbe Code.
In onCreate
Funktion ...
Button addContent = (Button)findViewById(R.id.addContent_button);
final ListView myList = (ListView)findViewById(R.id.mainMenuList);
final boolean deleteMode = false;
String[] liegenSchaften = new String[] {};
final List<String> content = new ArrayList<String>(Arrays.asList(liegenSchaften));
final ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, content);
myList.setAdapter(adapter);
//load the Save Data
Map<String, ?> map = getSaveMap();
//add exists data to list
for (Map.Entry<String, ?> entry : map.entrySet()) {
content.add(entry.getValue().toString());
}
// Update adapter, this works fine!
adapter.notifyDataSetChanged();
addContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
content.add(editedText.getText().toString());
/* This adapter dont Update the new Content, the item display and is not clickeble */
adapter.notifyDataSetChanged();
editor.putString(editedText.getText().toString(), editedText.getText().toString());
editor.commit();
}
});
myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//load the Save Data
Map<String, ?> map = getSaveMap();
Object obj = myList.getAdapter().getItem(position);
String value = obj.toString();
//add exists data to list
for (Map.Entry<String, ?> entry : map.entrySet()) {
if(entry.getValue().toString() == value) {
if(deleteMode) {
editor.remove(value);
editor.commit();
content.remove(position);
adapter.notifyDataSetChanged();
} else {
selectedContent = entry.getValue().toString();
addMessage.setText(entry.getValue().toString() + " Wurde gewählt.");
addMessage.show();
}
}
}
}
});
Ich erinnere mich, das gleiche Problem zu bekommen. Wenn ich mich richtig erinnere, habe ich das Problem vernachlässigt, indem ich den Listener in der Adapterklasse selbst erstellt habe. –
wie meinst du das? Vielleicht hast du ein kleines Beispiel? – ivorysmoker
Hier gehen Sie für das Beispiel eines benutzerdefinierten Adapters - http://StackOverflow.com/a/37235985/3145960 –