Android ArrayAdapter有时不执行getView()方法(取决于设备)

Android ArrayAdapter有时不执行getView()方法(取决于设备),android,listview,android-arrayadapter,baseadapter,Android,Listview,Android Arrayadapter,Baseadapter,对于ArrayAdapter的子类,我有以下代码: public class DashboardListAdapter extends ArrayAdapter<RowItem> { Context context; Integer deviceID; private Integer size; public DashboardListAdapter(Context context, int resourceId, List

对于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;
    }
}
当应用程序打开并正常工作时,这会运行,但当我与web服务同步时,我调用了另一个方法,该方法传入一组新的列表项,ListView显示为空,调试时,适配器中的getView()永远不会被调用

我研究了一些东西,并添加了当时工作过的重写“GETCOUNT”方法,现在它不起作用,再次显示空白屏幕。我还将适配器改为扩展baseAdapter,并相应地修改了适配器类,但这个问题仍然存在。为了让事情变得更有趣,我在10英寸Nexus平板电脑和Nexus 4上没有遇到任何问题,而三星Galaxy Tab 10.1和Nexus 7(2012)偶尔也会出现这种错误


当ListView为空且我旋转屏幕时,显示屏将刷新并显示正确的信息,如果我先锁定然后解锁设备,则相同。

“当ListView为空且我旋转屏幕时,显示屏将刷新并显示正确的信息,如果我先锁定然后解锁设备,则相同。”

导致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();

   }
列表项;
public void setItemList(列出新项){
this.items=newItems;
this.notifyDataSetChanged();
}
public int getCount(){
返回this.items==null?0:this.items.size();
}

同步时,您只需调用setItemList(newSyncedItems);

请提供代码,以便您使用服务中的新数据更新适配器。之后是否调用
notifyDataSetChanged()
?从web服务获取数据后,以及调用
lv.setAdapter(itemAdapter)后
您是否调用
itemAdapter.notifyDataSetChanged()
我不调用
itemAdapter.notifyDataSetChanged()
,但如果没有这个,只调用
setAdapter()
对我的主要测试设备(Nexus 10和4)有效.我刚刚添加了它,它可以正常工作,但没有擦除视图…但是再次尝试使用旧代码,没有问题。
   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();

   }