Android ListView丢失项目高度

标签 android listview

所以我有一个 lisview,其中每一行/项目隐藏/显示不同的控件。

我跟踪所有数据并根据我的数据在 onItemClickgetView 中设置控件的可见性。

但是,这意味着项目的高度不同......但是当用户将具有非标准高度的项目滚动到 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/

相关文章:

android - SQLite 绑定(bind)参数 - 它们仅限于 WHERE 子句吗?

android - 删除android按钮上的阴影效果

android - holder中的元素被取走如何兑换总数?

android - 我有一个关于 android listView 和 baseAdapter 的奇怪情况?

android - 无法从 onOptionsItemSelected 中使用 LayoutInflater

android - 如何在 AR 中将 3D 模型放置在屏幕中心,并相对于轴上的摄像机角度将其移动近或远?

android - 在 Android 应用程序中将软键背景从黑色更改为透明

android - 带有 RelativeLayout 的 ListView 在按下时不突出显示背景

android - 如果向下滚动列表,则在使用 ViewHolder 时应用程序崩溃

android - 如何从 JSONArray 中删除两个相同的元素?