我想提前感谢你解决我的问题。
我的listview有一个自定义适配器。列表项有一个imageView(1),一个progressBar(3)和一个下载按钮(2)。
当点击每个列表项的下载按钮时,我抓住了列表项的重要细节,例如视图的位置,按钮的resourceid,imageview的资源ID和进度条的资源ID,然后我制作一个可以上课的对象"下载"。
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);
我启动了一项服务,可以进行下载并使用广播进行报告。收到此广播消息后,我想更新进度条。
我的问题是如何从接收消息的主要活动中获取有关的进度条。我该如何参考?
我目前正在使用一个parcelable对象来传递进度条的资源ID,从适配器到服务,然后使用intent的putExtra(),然后我传递给接收活动(mainActivity)在mainActivity
执行此操作Download download = (Download)intent.getParcelableExtra("download");
ProgressBar progressBar = (ProgressBar)findViewById(download.getProgressBarResource());`
这里的问题是,无论单击哪个列表项,始终只返回列表的第一项。我想获得每个唯一的listitem并更新进度条和下载按钮。感谢
答案 0 :(得分:1)
我假设您在😃
或ListView
中显示此布局。首先需要做的是,在RecyclerView
类中为index
添加一个字段,以标识列表中按下该按钮的位置。接下来,将Download
从index
或getView()
传递给创建onBindViewHolder()
对象的函数,并将Download
添加到对象中。
当您收到index
广播任何更新的时间时,请确保包含Service
值。现在,在您收到广播值的活动代码中,提取index
和index
的值。现在,您可以编写类似的内容来更新列表中该视图的进度:
progress
答案 1 :(得分:0)
这可以是解决问题的方法之一
为您的列表视图实施setOnItemClickListener
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
//now point to your item position and do your stuff here
}
});
当您收到下载进度广播时。只需通过使用包含下载进度值的新项目对以前的项目进行Nullification来更新ListView。
答案 2 :(得分:0)
不确定这是否是你要找的......
在你的适配器中。在下面做..(我从我的项目中取样,当点击删除按钮时,从列表中删除卡片)
在适配器内的getView函数中。
Card card = list.get(position);
viewHolder.imgDelete.setTag(card);// --> i set the whole card info to tag
在适配器外面。
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
if (id == R.id.iv_delete_card) {
//System.out.println("---> Card: " + tag);
//delete card
Object tag = v.getTag();
if (tag != null && tag instanceof Card) {
promptDeleteCard((Card) tag);
}
}
}