2016-12-31 4 views
0

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(); 
       } 
      } 
     } 
    } 
}); 
+0

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. –

+0

wie meinst du das? Vielleicht hast du ein kleines Beispiel? – ivorysmoker

+0

Hier gehen Sie für das Beispiel eines benutzerdefinierten Adapters - http://StackOverflow.com/a/37235985/3145960 –

Antwort

0

ich das Problem gefunden haben:

Die Abfrage war falsch. Jetzt habe ich gleich verwendet und die ArrayAdapter funktioniert wunderbar!

if(entry.getValue().toString().equals(value)) 
Verwandte Themen