2015-12-17 25 views
0

正如您应该知道的那样,ListView可以回收视图。但是我想要使用可以单击和展开的元素。就像我已经做了: ListView和它的“怪异”行为。我该如何解决这种情况?

但它完全搞砸了,即使使用:

View checklayout = convertView; 
if(checklayout == null){ 
     checklayout = inflater.inflate(R.layout.home_cell, null); 
    } 

当一些扩张开看法熄灭屏幕,再生一个,这不应该是可扩展的,收到消失的布局。只有拥有“1AVALIAÇÃOLANÇADA”的视图才能打开并显示其内容。我通过使用if(qtdAvaliacoes > 0)来添加此内容,这是我的对象的一个​​属性,它来自ArrayList <>。

我 “解决” 这个禁用回收,具有:

@Override 
public int getViewTypeCount() { 
    return getCount(); 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

一旦我的ListView将只接收5〜10行。但我知道这不是一个好的做法。虽然我书面方式这个问题,我找到了解决办法,打电话给我对象之前充气任何视图,然后检查属性:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View checklayout = convertView; 
    final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final Disciplina disciplina = lista.get(position); 

    if(checklayout == null || disciplina.getQtdAvaliacoes() == 0){ 
     checklayout = inflater.inflate(R.layout.home_cell, null); 
    } 

    final View layout = checklayout; 

但我不认为这是做到这一点的最好办法。我读了一些关于标签的内容,但是很困惑。我想如果我可以将这些onClick方法绑定到行位置,它会更好。

任何想法?或者,我的解决方案对你来说是开发商的观点。 谢谢。

回答

0

最简单的方法是不要在列表项中进行子练习。而不是通过视图可见性来做到这一点,如果你不想让它显示出来,那么使得膨胀的部分变为无效。您只需在每次调用getView时明确设置该视图的可见性

+0

它不会让我的应用程序加载更多数据吗?因为用户不会总是需要这些表。此外,表格是动态填充的。谢谢 ! –

+0

这将需要你有更多的意见。尽管最初的充气时间会增加一点,但实际的数据差异很小。 perf可能会有轻微的打击,但几乎找到的任何解决方案都会打到循环视图,这通常很难做到。另一种做法是拥有2种视图类型 - 完全充气的视图类型和不充气的视图类型,并跟踪哪些项目应该膨胀或不膨胀。这是更多的工作,但会降低大部分性能(尽管最终可能需要更多数据,具体取决于回收商的持有量)​​。 –

相关问题