对于ArrayAdapter的子类,我有以下代码:
public class DashboardListAdapter extends ArrayAdapter<RowItem> {
Context context;
Integer deviceID;
private Integer size;
public DashboardListAdapter(Context context, int resourceId,
List<RowItem> items, Bitmap b, Integer id) {
super(context, resourceId, items);
this.size = items.size();
this.deviceID = id;
this.context = context;
}
/*private view holder class*/
private class ViewHolder {
ImageView imageView;
TextView txtTitle;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.dashboard_item, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
if (!isTablet(context))
{
holder.txtTitle.setTextSize(15);
}
return convertView;
}
@Override
public int getCount()
{
return size;
}
}
将其设置为ListView,如下所示:
itemAdapter = new DashboardListAdapter(getApplicationContext(), R.layout.menufragment_item, itemArray, bitmap, deviceID);
lv.setAdapter(itemAdapter);
当应用程序打开并正常工作时运行,但是当我与Web服务同步时,我调用一个不同的方法,该方法传入一组新的List项,ListView显示为空,并在调试getView()时永远不会调用适配器。
我研究了一些东西并添加了Overridden&#34; getCount&#34;当时工作的方法,现在它不起作用并再次显示空白屏幕。我也改变了适配器以扩展baseAdapter,并相应地修改适配器类,但这个问题仍然存在。为了让事情变得更有趣,我在10&#34; Nexus平板电脑和Nexus 4,而三星Galaxy Tab 10.1和Nexus 7(2012)缝合偶尔会出现此错误。
当ListView为空并且我旋转屏幕时,显示屏会刷新并显示正确的信息,如果我锁定则会显示相同信息,然后解锁设备。
答案 0 :(得分:1)
&#34;当ListView为空并且我旋转屏幕时,显示屏会刷新并显示正确的信息,如果我锁定然后解锁设备则相同。&#34;
可能导致未调用getView()方法的唯一问题是getCount返回0或其他预期值。
正如我所看到的,传递项目列表的唯一方法是在适配器构造函数中。这就是屏幕旋转后刷新的原因。 (活动被重新创建,你的适配器也是如此,瞧!)
您的适配器应如下所示:
List<RowItem> items;
public void setItemList(List<RowItem> newItems){
this.items = newItems;
this.notifyDataSetChanged();
}
public int getCount(){
return this.items == null?0:this.items.size();
}
同步时,只需调用setItemList(newSyncedItems);