java - ListAsGridBaseAdapter 仅在项目数为偶数时显示网格项目

标签 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;
    }

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

最佳答案

编辑:事实证明,用父 View 膨胀 View 会导致这个问题。 当前的解决方案(解决方法)是通过空父级来膨胀它。

所以,这个:

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

应该是:

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

是的,这是一个错误,我会在以后尝试修复它。感谢您找到它!

它适用于 10 多个项目,因为当您滚动时, View 会被适配器回收,因此父项已得到适当的测量。

之前的回答:

我刚刚重新编译了示例的最后一个版本,该版本包含奇数个项目,并且在单独的行上显示了最后一个项目。

也许列/项目数的特定配置存在错误,但原则上它是有效的。

enter image description here

关于java - ListAsGridBaseAdapter 仅在项目数为偶数时显示网格项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987801/

相关文章:

使用非明文密码进行 Java LDAP 身份验证

java - 更改 StyledDocument 中的特定字符串属性

android - Android 上的 oauth_callback

c# - GridView 到 Excel

javascript - 使用 jquery 更改值时,asp.net 文本框更改事件未触发

java - 如何在java流中的sum函数中应用过滤器

java - 如何为这堆for循环指定一个通用公式来减少代码?

android - 访问 fragment 内部的数据库处理程序

android - 我在 Android studio 3.0 Beta 5 中运行应用程序时遇到 Multidex 问题

c# - 如何在 gridview editItemTemplate 内的列表框中选择多个值?