gpt4 book ai didi

java - 如何从适配器外部获取 ListView 项的 subview

转载 作者:行者123 更新时间:2023-12-01 09:28:27 28 4
gpt4 key购买 nike

我想提前感谢您解决我的问题。

我有一个适用于我的 ListView 的自定义适配器。该列表项有一个 imageView(1)、一个进度条(3) 和一个下载按钮(2)。

listitem

当单击每个列表项的下载按钮时,我会获取列表项的重要详细信息,例如 View 的位置、按钮的资源 id、imageview 的资源 id 和进度条的资源 id,然后我制作一个“Download”类的可分割对象。

Download download = new Download();
download.setUrl(url);
download.setButtonResource(this.downloadBt.getId());
download.setCreativeWork(creativeWork);
download.setDownloadBt(this.downloadBt);

download.setProgressBarResource(this.progressBar.getId());
download.setProgressBar(this.progressBar);
download.setContext(activity);
download.setViewResource(view.getId());

Intent intent = new Intent(activity, BroadcastService.class);
intent.putExtra("download", download);

Log.e("download button", url);

activity.startService(intent);

我启动了一项服务,该服务进行下载并使用广播返返回告。当收到此广播消息时,我想更新进度条。

我的问题是如何从接收消息的主 Activity 中获取相关的进度条。我该如何引用这个?

我目前正在使用 Parcelable 对象来传递进度条的资源 id,从适配器一直传递到服务,然后使用 Intent 的 putExtra() 传递到接收 Activity (mainActivity),然后我在主要 Activity

Download download = (Download)intent.getParcelableExtra("download");
ProgressBar progressBar = (ProgressBar)findViewById(download.getProgressBarResource());`

这里的问题是,无论单击哪个列表项,始终只返回列表的第一项。我想获取每个唯一的列表项并更新进度栏和下载按钮。谢谢

最佳答案

我假设您在 ListViewRecyclerView 中显示此布局。需要做的第一件事是,在 Download 类中添加一个 index 字段,以标识列表中按下该按钮的位置。接下来,将 indexgetView()onBindViewHolder() 传递到创建 Download 对象的函数并将该索引添加到对象中。

当您从服务广播任何更新时,请务必包含index值。现在,在您接收广播值的 Activity 的代码中,提取 index 的值和 progress。现在,您可以编写类似以下内容来更新列表中该 View 的进度:

int index = ... //some value you received in broadcast
int progress = ...//some value you received in broadcast

View view = listView.getChildAt(index);
if (view != null) {
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
if (progressBar != null) {
progressBar.setProgress(progress);
}
}

关于java - 如何从适配器外部获取 ListView 项的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39653722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com