Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView和it';s";“奇怪”;行为。我怎样才能解决这个问题?_Android_Listview_Android Listview_Android Recyclerview - Fatal编程技术网

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时显式设置该视图的可见性

,这难道不会让我的应用程序加载更多数据吗?因为用户并不总是需要这些表。此外,该表是动态填充的。谢谢这需要你有更多的观点。虽然初始充气时间会稍微增加,但实际数据差异最小。性能可能会受到轻微的影响,但您找到的几乎任何解决方案都会影响性能—将性能膨胀到循环视图通常很难做到。另一种方法是使用两种视图类型—完全充气视图类型和未充气视图类型,并跟踪哪些项目应充气或不充气。这需要更多的工作,但会减少大部分性能点击(尽管最终可能需要更多的数据,这取决于回收商持有的数据量)。