当我删除某些内容时,ListView 不刷新

ListView doesn't refresh when I delete 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();
}

我尝试使用 Runnable,但没有成功。

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

我的 onCreate 方法:

    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);

您正在使用 m_orders 数据集创建一个 m_adapter,但您正在从 m_teams 数据集中删除项目,没有意义,它们是不同的实例。

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

您必须从适配器 class 内的 ArrayList 中删除一个项目。因此,您需要在适配器 class 中编写删除函数。这样就可以通过调用 notifyDataSetChanged() 方法来删​​除项目和更新列表视图。