gpt4 book ai didi

android - notifyDataSetChanged 使应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 22:25:02 27 4
gpt4 key购买 nike

有人可以向我解释以下问题的来源:

我有一个列表,根据某些偏好显示多个项目。用户可以通过 SlidingDrawer 更改这些首选项。每当发生这种情况时,我都会获得与新首选项相对应的项目,然后使用以下代码将结果设置为支持 ListView 的适配器。

 public void update(final List<Report> reports)
{
adapter.setReports(reports);
((ArrayAdapter)list.getAdapter()).notifyDataSetChanged();
list.invalidate();
}

这是适配器类

public class ReportsAdapter extends ArrayAdapter<Report>
{
List<Report> reports;
Activity context;

public void setReports(List<Report> reports)
{
this.reports = reports;
}

ReportsAdapter(Activity context, List<Report> reports)
{
super(context, R.layout.row_report, R.id.report_timestamp,reports) ;

this.reports = reports;
this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = context.getLayoutInflater().inflate( R.layout.row_report, null);

TextView timestamp = (TextView)row.findViewById(R.id.report_timestamp);
if(timestamp != null)
timestamp.setText("Timestamp: "+reports.get(position).getTimestamp());

TextView type = (TextView)row.findViewById(R.id.report_type);
if(type != null)
type.setText("Type: "+reports.get(position).getReportType().getType().toString());

TextView status = (TextView)row.findViewById(R.id.report_status);
if(status != null)
status.setText("Status: "+reports.get(position).getStatus());

ImageView icon = (ImageView)row.findViewById(R.id.report_icon);
if(icon != null && reports.get(position).getReportType().getType()!= ReportType.RType.DEFAULT)
{
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), reports.get(position).getIconResource());
if(bitmap != null)
{
icon.setImageBitmap(bitmap);
}
}
return row;
}
}

之后应用程序崩溃并在适配器中出现 ArrayOutOfBoundsException。

最佳答案

嗯嗯,你的自定义适配器是从什么扩展而来的?您可能没有更新 getCount() 从中获取其大小的同一个数组/列表。或者您的 getCount() 实现可能存在其他问题。我通过实践发现,让 Adapter 正常工作的最安全方法是仅从 BaseAdapter 扩展并填写编译器要求您填写的任何方法。

顺便说一下,您不必通过列表获取适配器(希望它与 adapter 相同),因此您可以执行 adapter.notifyDatasetChanged() 直接。

如果这不能解决您的问题,请考虑发布您的适配器代码。

关于android - notifyDataSetChanged 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181107/

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