android - notifyDataSetChanged() 方法不起作用
问题描述
我创建了一个应用程序,其中我创建了一个自定义列表视图。当用户单击自定义列表视图中存在的下载按钮时,将下载文件然后我想禁用或隐藏该按钮,我可以隐藏该按钮,但是当用户按下并再次返回时,按钮隐藏但我想要什么时候用户单击下载按钮,应下载文件,然后立即隐藏该按钮。这是我的自定义列表适配器的代码
@Override
public View getView(final int position, View convertView,
ViewGroup parent)
{
ViewHolder holder;
if(convertView==null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_layout, null);
Typeface.createFromAsset(getContext().getAssets(),"DroidSans-Bold.ttf");
holder.textViewName = convertView.findViewById(R.id.textViewName);
holder.textViewurl = convertView.findViewById(R.id.textViewUrl);
holder.download = convertView.findViewById(R.id.downloadimage);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
holder.textViewName.setText(pdfList.get(position).getName());
holder.textViewurl.setText(pdfList.get(position).getUrl());
File file = new File(Environment.getExternalStorageDirectory() + "/"
+ "android"+"/"+"data"+"/"+"foldername"+"/"+ pdfList.get(position).getName()+".pdf");
if(file.exists())
{
holder.download.setVisibility(View.GONE);
}
else
{
holder.download.setVisibility(View.VISIBLE);
holder.download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClick(position);
}
});
}
notifyDataSetChanged();
return convertView;
}
解决方案
您的 notifyDataSetChanged() 位置错误,请尝试在单击下载按钮时调用它。
@Override
public View getView(final int position, View convertView,
ViewGroup parent)
{
ViewHolder holder;
if(convertView==null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_layout, null);
Typeface.createFromAsset(getContext().getAssets(),"DroidSans-Bold.ttf");
holder.textViewName = convertView.findViewById(R.id.textViewName);
holder.textViewurl = convertView.findViewById(R.id.textViewUrl);
holder.download = convertView.findViewById(R.id.downloadimage);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
holder.textViewName.setText(pdfList.get(position).getName());
holder.textViewurl.setText(pdfList.get(position).getUrl());
File file = new File(Environment.getExternalStorageDirectory() + "/"
+ "android"+"/"+"data"+"/"+"foldername"+"/"+ pdfList.get(position).getName()+".pdf");
if(file.exists())
{
holder.download.setVisibility(View.GONE);
}
else
{
holder.download.setVisibility(View.VISIBLE);
holder.download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClick(position);
notifyDataSetChanged();
}
});
}
return convertView;
}
推荐阅读
- javascript - 如何在对话框中更改集合中的字符串的文本颜色
- git - 如何在不覆盖 PR 和更改作者的情况下修改历史提交消息?
- logstash - 为什么filebeat会尝试连接elasticseach?
- javascript - How to pass data for partial view using Jquery
- angular - 在 Eclipse 中创建 Angular 项目失败,并显示消息“目录 \drivers\etc 不存在”
- c# - Xamarin 从 listview+sqlite 数据库中删除
- r - 使用 Gelman-Rubin PSRF 进行收敛诊断:R coda package vs Runjags
- python - 如何使用字典将数据插入数据框,如果列中存在键则设置值
- .net - .netcore 2.2 从 iframe 调用页面时的会话变量问题
- javascript - 仅使用前端(html、js、css)的模板