Murilo Pereira
Murilo Pereira

Reputation: 109

ListView doesn't refresh when I delete something

I have an custom adapter that is giving me problem. When I add or edit something it updates the listview but when I delete it doesn't.

Code when I remove something:

private ArrayList<Teams> m_orders = null;
private TeamsAdapter m_adapter;
private ListView lstv;
...
private void deleteTeam(int indexRemove){
    hasKeys.remove(hasKeys.indexOf(m_orders.get(indexRemove).getTeamName()));
    Menu.teams.remove(m_orders.get(indexRemove).getTeamName());
    m_orders.remove(indexRemove);
    m_adapter.notifyDataSetChanged();
}

I tried use a Runnable, but without success.

 private Runnable returnRes = new Runnable() {
    @Override
    public void run() {
        if(m_orders != null && m_orders.size() > 0){
            m_adapter.notifyDataSetChanged();
            for(int i=0;i<m_orders.size();i++)
                m_adapter.add(m_orders.get(i));
        }
        m_adapter.notifyDataSetChanged();
    }
};

My onCreate method:

    lstv = findViewById(R.id.teamsList);
    m_orders = new ArrayList<Teams>();
    this.m_adapter = new TeamsAdapter(this, R.layout.row, m_orders);
    lstv.setAdapter(this.m_adapter);

Upvotes: 0

Views: 68

Answers (2)

You have to remove an item from the ArrayList which is inside the Adapter class. So you need to write your delete function inside the adapter class. In this way will able to delete items and update listview by calling notifyDataSetChanged() method.

Upvotes: 1

betorcs
betorcs

Reputation: 2821

You are creating an m_adapter with m_orders dataset, but you are removing item from m_teams dataset, make no sense, they are different instances.

final List<Teams> mTeams = new ArrayList<>();
TeamsAdapter mAdapter;

onCreate() {
    mAdapter = new TeamsAdapter(this, R.layout.row, mTeams);
    ListView listView = (ListView) findViewById(R.id.teamsList);
    listView.setAdapter(mAdapter);
}

addTeams(Collection<Teams> items) {
    mTeams.addAll(items);
    mAdapter.notifyDataSetChanged();
}

deleteTeam(int index) {
   mTeams.remove(index);
   mAdapter.notifyDataSetChanged();
}

Upvotes: 0

Related Questions