ListView和它的“怪异”行为。我该如何解决这种情况?

时间:2015-12-17 22:00:36

标签: android listview android-listview android-recyclerview

您应该知道,ListView会回收视图。但我想使用可以点击和扩展的元素。像我已经做过的那样:

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

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

当一些打开的可扩展视图离开屏幕时,回收的视图不应该是可扩展的,它会接收消失的布局。只有具有“1AVALIAÇÃONLANADA”的视图才能打开,并显示其内容。我使用if(qtdAvaliacoes > 0)添加此内容,@Override public int getViewTypeCount() { return getCount(); } @Override public int getItemViewType(int position) { return position; } 是我的Object的属性,来自ArrayList<>。

我通过以下方式解决了这个禁用回收商的问题:

@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;

一旦我的listView只收到5~10行。但我知道这不是一个好习惯。当我写这个问题时,我找到了一个解决方案,在给任何视图充气之前调用我的对象,然后检查属性:

NAME | SURNAME 
Joe  | Doe
John | Smith

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

有什么想法吗?开发人员的观点是我的解决方案对你有好处。 感谢。

1 个答案:

答案 0 :(得分:0)

最简单的方法是不在列表项中执行子通道。通过视觉可见性来做,如果你不希望它显示,那么使膨胀的部分为GONE。您只需在每次调用getView

时明确设置该视图的可见性