2013-07-11 135 views
1

所以我有一个lisview每行/项目隐藏/显示不同的控件。的Android的ListView丢失物品高度

我跟踪所有的数据和控制设置在公开程度onItemClickgetView根据我的数据。

但是,这意味着项目的高度是不同的......但是当用户滚动具有非标准高度的视野项目时,即使其控件可见性设置为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 
       } 
+1

问题可能是因为convertview的。发布您的代码 – user936414

+0

现在发布的代码:) – Tom

+1

我会尝试不使用“if(null == view)”,不知道为什么你需要那个性能的原因? –

回答

1

滚动列表视图时,滚动的行将被重用并填充新数据。根据你的逻辑,当你设置列表项按钮的可见性时,当你滚动列表并再次到达这个位置时,这行的状态将不会被保留,因为视图正被重用。

你必须保持列表视图的点击位置在一个HashMap或布尔数组(如果项目列表中的数小于)使得位置索引为true。在getView中,检查位置是否已经用布尔值数组单击。如果为true,则使按钮可见。否则使它们不可见。有关如何使用它们一个清晰的思路检查我的答案https://stackoverflow.com/a/13083795/936414

+0

正如我写的在我的第一篇文章中,我跟踪了我自己的数据结构(**代码中的**数据**引用)的可见性以及每次在** getView **代码中设置控件的可见性。这可以工作,据我所知,**高度**然而不是:( – Tom