Android ListView和it';s";“奇怪”;行为。我怎样才能解决这个问题?
您应该知道,Android ListView和it';s";“奇怪”;行为。我怎样才能解决这个问题?,android,listview,android-listview,android-recyclerview,Android,Listview,Android Listview,Android Recyclerview,您应该知道,ListView回收视图。但我希望使用可以单击和展开的元素。就像我已经做的那样: 但它完全是一团糟,即使使用: View checklayout = convertView; if(checklayout == null){ checklayout = inflater.inflate(R.layout.home_cell, null); } 当一些打开的可展开视图离开屏幕时,回收的视图(不应展开)将接收消失的视图的布局。只有具有“1 AVALIAÃO L
ListView
回收视图。但我希望使用可以单击和展开的元素。就像我已经做的那样:
但它完全是一团糟,即使使用:
View checklayout = convertView;
if(checklayout == null){
checklayout = inflater.inflate(R.layout.home_cell, null);
}
当一些打开的可展开视图离开屏幕时,回收的视图(不应展开)将接收消失的视图的布局。只有具有“1 AVALIAÃO LANÇ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方法绑定到行位置,那会更好
有什么想法吗?或者,从开发者的角度来看,我的解决方案是否适合您。
谢谢。最简单的方法是不要在列表项中进行充气。相反,通过视图可视性进行操作,如果您不想显示充气部分,则使其消失。您只需在每次调用getView时显式设置该视图的可见性,这难道不会让我的应用程序加载更多数据吗?因为用户并不总是需要这些表。此外,该表是动态填充的。谢谢这需要你有更多的观点。虽然初始充气时间会稍微增加,但实际数据差异最小。性能可能会受到轻微的影响,但您找到的几乎任何解决方案都会影响性能—将性能膨胀到循环视图通常很难做到。另一种方法是使用两种视图类型—完全充气视图类型和未充气视图类型,并跟踪哪些项目应充气或不充气。这需要更多的工作,但会减少大部分性能点击(尽管最终可能需要更多的数据,这取决于回收商持有的数据量)。