1
有人可以解釋我在哪裏下面的問題來自:notifyDataSetChanged崩潰的應用程序
我有一個列表,根據一些喜好顯示幾個項目。用戶可以通過SlidingDrawer更改這些首選項。每當發生這種情況時,我會得到與新的首選項對應的項目,然後將結果設置爲支持下面代碼的支持列表視圖的適配器。
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應用程序崩潰後。
我添加了自定義適配器的代碼 – steve 2011-05-30 22:13:43
是的,正如我懷疑的那樣。問題是'getCount()'是基於你初始化適配器的數組的*原始*大小(參見[這裏](http://www.netmite.com/android/mydroid/1.5/frameworks/) base/core/java/android/widget/ArrayAdapter.java)),你可以覆蓋它,但正如我所說,如果你只是從'BaseAdapter'擴展,就會更容易。 – dmon 2011-05-30 22:20:02
是的,我看到在初始化後,對支持數據的內部引用永遠不會被修改 – steve 2011-05-30 22:27:27