所以我有一个 lisview,其中每一行/项目隐藏/显示不同的控件。
我跟踪所有数据并根据我的数据在 onItemClick 和 getView 中设置控件的可见性。
但是,这意味着项目的高度不同......但是当用户将具有非标准高度的项目滚动到 View 之外时,其高度将重置为标准,即使其控件可见性设置为 getView
要做什么?有没有办法强制重新计算高度?
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(null == view)
{
LayoutInflater vi = (LayoutInflater) thisActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.override_listitem_catalog, null);
}
MyListItemExt data = objects.get(position);
if(null != data)
{
// ... do work
}
最佳答案
当滚动 ListView 时,滚动的行被重新使用并填充新数据。根据您的逻辑,当您设置按钮的可见性 onclick 列表项行时,当您滚动列表并再次来到该位置时,由于 View 被重用,该行的状态将不会保持。
您必须将 ListView 的点击位置保留在 HashMap 或 bool 数组中(如果列表中的项目数量较少),使位置索引为真。在 getView 中,使用 bool 数组值检查该位置是否已被点击。如果为真,则使按钮可见。否则使它们不可见。要清楚地了解如何使用它们,请查看我的答案 https://stackoverflow.com/a/13083795/936414
关于Android ListView丢失项目高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592750/