如何在动态删除项目时更新适配器的listView数据?

时间:2017-06-18 15:06:29

标签: android listview

我使用自定义适配器在listView中显示RequestDetails类型的对象。每个listView项都有一个accept和deny按钮。 单击按钮后,对(Firebase)数据库进行相应的更改 - 在这两种情况下,请求都会从数据库中删除,但我不知道如何刷新listView以反映数据库中所做的更改。 我读了一下notifyDataSetChanged(),但我不太确定如何在我的情况下使用它。

这是我创建的自定义适配器(RequestAdapter)中按钮的onClickListeners的代码段:

[HttpPost]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(_options.SiteSpecificUrl);

        foreach (var file in files)
        {
            if (file.Length <= 0)
                continue;

            var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

            using (var content = new MultipartFormDataContent())
            {
                content.Add(new StreamContent(file.OpenReadStream())
                {
                    Headers =
                    {
                        ContentLength = file.Length,
                        ContentType = new MediaTypeHeaderValue(file.ContentType)
                    }
                }, "File", fileName);

                var response = await client.PostAsync(_options.WebApiPortionOfUrl, content);
            }
        }
    }
}

出于某种原因,在点击“拒绝”按钮时,我删除了“&#39;”项目的副本。被附加到listView ..

我确定我没有正确使用notifyDataSetChanged()方法,因为在我读过的其他帖子中,它总是被&#39;适配器&#调用39;宾语。如果我尝试这样做,我会收到错误,其中&#39; adapter&#39;无法解决。

如果有任何用处,请点击我设置适配器的onCreate()代码活动:

@{
    ViewData["Title"] = "Home Page";
}

<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data">
    <input type="file" name="files" multiple />
    <input type="submit" value="Upload" />
</form>

任何人都可以帮助我吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

适配器的工作方式是将arraylist作为参数,并将其转换为可表示的&#34;要在ListView中查看的列表。 方式&#34; notifyDataSetChanged&#34;是的,它是&#34;是&#34;调用了一个适配器(也就是这样),但是因为你在你的适配器类中调用它,所以编译器正在以这种方式读取它[this.notifyDataSetChanged],其中(这里类似于适配器)。

现在提出你的问题。每次接受或拒绝某个项目时,都会对Firebase数据库应用相应的更改,为什么会出现此问题,正如我之前所说的,notifyDataSetChanged所做的就是检查ArrayList中的更改并且&#34;刷新&# 34;本身和listView基本上应用这些更改。尝试访问在自定义数组适配器的构造函数中传递的ArrayList,并在denyButton单击侦听器中,当您从请求循环器中删除请求时,也将其从arrayList中删除。