我使用自定义适配器在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>
任何人都可以帮助我吗?
提前致谢!
答案 0 :(得分:1)
适配器的工作方式是将arraylist作为参数,并将其转换为可表示的&#34;要在ListView中查看的列表。 方式&#34; notifyDataSetChanged&#34;是的,它是&#34;是&#34;调用了一个适配器(也就是这样),但是因为你在你的适配器类中调用它,所以编译器正在以这种方式读取它[this.notifyDataSetChanged],其中(这里类似于适配器)。
现在提出你的问题。每次接受或拒绝某个项目时,都会对Firebase数据库应用相应的更改,为什么会出现此问题,正如我之前所说的,notifyDataSetChanged所做的就是检查ArrayList中的更改并且&#34;刷新&# 34;本身和listView基本上应用这些更改。尝试访问在自定义数组适配器的构造函数中传递的ArrayList,并在denyButton单击侦听器中,当您从请求循环器中删除请求时,也将其从arrayList中删除。