ListAsGridBaseAdapter仅在存在偶数项时显示网格项

时间:2014-07-28 02:46:33

标签: java android gridview baseadapter listadapter

我一直在使用plattysoft的ListAsGridBaseAdapter来显示带有可滚动标题的gridview项目。我的gridview有2列,当我显示奇数个项目(如1项)时,gridview上没有任何内容,只显示了标题。仅当有偶数项目(如2或4项)时才会显示这些项目。

我一直试图对此进行调试一段时间,但无法弄清code链接中导致此问题的原因。

编辑:网格不显示1,3,5,7和9个gridview项目的第n个奇数元素。如果您有10个或更多gridview项,则它会显示所有项目。

ListAsGridExampleAdapter.java的编辑版本如下:

public class ListAsGridExampleAdapter extends ListAsGridBaseAdapter {

    private List<Item> items = new ArrayList<Item>();
    private LayoutInflater inflater;
    private Context context;

    public ListAsGridAdapter(Context context) {
        super(context);
        this.context = context;
        inflater = LayoutInflater.from(context);

        items.add(new Item("item 1/5", "item", R.drawable.item_pic, 0, 0));
        items.add(new Item("item 2/5", "item", R.drawable.item_pic, 0, 0));
        items.add(new Item("item 3/5", "item", R.drawable.item_pic, 0, 0));
        items.add(new Item("item 4/5", "item", R.drawable.item_pic, 0, 0));
        items.add(new Item("item 5/5", "item", R.drawable.item_pic, 0, 0));
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    @Override
    protected View getItemView(int position, View view, ViewGroup viewGroup) {
        View item = view;
        if (view == null) {         
            item = inflater.inflate(R.layout.item_view, viewGroup, false);
            item.setTag(R.id.item_icon, item.findViewById(R.id.item_icon));
            item.setTag(R.id.item_title, item.findViewById(R.id.item_title));
        }
        Item currentItem = (Item)getItem(position);


        // Fill the view
        ImageView itemImage = (ImageView)item.getTag(R.id.item_icon);
        itemImage.setImageResource(currentItem.getIconID());

        // Item Name:
        TextView itemText = (TextView)item.getTag(R.id.item_title);
        itemText.setText(currentItem.getItemName());
        return item;
    }

以下是显示内容的屏幕截图,因为您可以看到缺少第5个元素:  missing 5th item

1 个答案:

答案 0 :(得分:2)

编辑:事实证明,用父母夸大视图会导致此问题。 当前的解决方案(解决方法)是通过空父级来扩充它。

所以,这个:

item = inflater.inflate(R.layout.item_view, viewGroup, false);

应该是:

item = inflater.inflate(R.layout.item_view, null);

是的,这是一个错误,我将来会尝试修复它。谢谢你找到它!

它适用于10个以上的项目,因为滚动时,视图会被适配器回收,因此父项已经过适当的测量。

上一个回答:

我刚刚重新编译了样本的最后一个版本,它有一个奇数个项目,它显示了一个单独行上的最后一个项目。

根据列/项的数量,可能存在特定配置的错误,但原则上它可以正常工作。

enter image description here