Peter Chikov
Peter Chikov

Reputation: 151

ListView onClick update clears the list

I have the following code that's supposed to remove the item that is clicked on:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    String itemValue = (String) listView.getItemAtPosition(position);
    email_addresses.remove(position);

    String size = Integer.toString(email_addresses.size());
    Log.d("Size: ", size);

    //listView = (ListView) findViewById(R.id.email_list);
    //ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses);
    //listView.setAdapter(adapter);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(mainAppContext, android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses);
    ((ListView)parent).setAdapter(adapter);
    parent.refreshDrawableState();
}

When I click on an item the list is cleared and nothing is displayed. The size is the correct value and the list can be rebuilt but I am unable to get this code to work. Thank you

Upvotes: 1

Views: 53

Answers (2)

Heshan Sandeepa
Heshan Sandeepa

Reputation: 3687

Define your list and adapter as instant variables and also You have to notify the adapter in order to make the deletion affect , Try this ,

        listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            email_addresses.remove(position);
            adapter .notifyDataSetChanged();
        }
    });

Upvotes: 1

Knossos
Knossos

Reputation: 16058

Instead of creating a whole new Adapter each time, have you thought about simply making your Adapter a member variable and calling notifyDataSetChanged?

ArrayAdapter<String> adapter = new ArrayAdapter<>(mainAppContext, android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses);
((ListView)parent).setAdapter(adapter);

Becomes:

mAdapter.notifyDataSetChanged();

Upvotes: 2

Related Questions