【问题标题】:ListView force re-inflate of list row layout after data changes数据更改后 ListView 强制重新膨胀列表行布局
【发布时间】:2012-11-06 09:04:50
【问题描述】:

我的 ListAdapter 中有以下代码

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View childView, ViewGroup parent)
    {
        I dataItemForChild = null;
        if (childPosition >= dataModel.size())
        {
            // its an extra row
        }
        else
        {
            dataItemForChild = (I) getChild(groupPosition, childPosition);
        }

        boolean isEvenRow = (childPosition % 2 == 0);
        if (childView == null)
        {
            final HashMap<Integer, View> viewMap = new HashMap<Integer, View>();
            childView = inflateChildView(isLastChild, isEvenRow, childPosition, groupPosition, dataItemForChild);
            childView.setTag(viewMap);
            addViewMappingCache(viewMap, childView);
            populateChildView(isLastChild, isEvenRow, childPosition, groupPosition, dataItemForChild, childView, viewMap);
        }
        else
        {
            populateChildView(isLastChild, isEvenRow, childPosition, groupPosition, dataItemForChild, childView, (HashMap<Integer, View>) childView.getTag());
        }
        return childView;
    }

问题是我有不同的布局用于列表中的不同行。当我更新数据然后调用adapter.notifyDataChanged()时,由于childView不为null,它不会再次调用inflateChildView,因此某些行的布局不再匹配数据所需的布局。

有没有办法使特定行“无效”或清除其布局缓存,使其传入的 childView 为空?

我正在尝试实现的特定用例是最后一行,上面写着“加载更多”。再次加载后,我希望用数据行替换 LoadMore 行,然后(如果有的话)新的最后一行应该是 LoadMore 行。

【问题讨论】:

  • 当您更改数据时,在执行此操作后调用 onCreate(savedInstanceState) 方法。
  • 我不想重新创建我的整个视图!只需强制特定行完全重新加载,并重新膨胀行布局。

标签: android listview


【解决方案1】:

您是否尝试过使用getItemViewType。当您的列表包含不同类型的行时,这很棒。适配器实现将独立管理每种行的缓存。

【讨论】:

  • 那么我是否应该为具有不同布局的每一行分配一个特定的任意整数?
  • @MikeS 是的。例如。你有 3 种不同的行。您需要使用整数 0、1 和 2。
  • @MikeS hm,您使用的是“ExpandableListAdapter”,不是吗?它根本没有getItemViewType。抱歉,我以为你用的是平常的Adapter
  • 是的,我使用的是等效的 - public int getChildType(int groupPosition, int childPosition) 没有成功:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多