使用自定义onTouchEvent处理的视图在ListView中表现非常糟糕,但在LinearLayout ScrollView组合中表现完美

时间:2016-02-07 10:21:15

标签: android listview

我有一个扩展RelativeLayout的类,在这个类中我重写“onTouchEvent”并通过设置他们的“setTranslationX(float translationX)”使用x移动到我的自定义RelativeLayout布局中的位置3视图来手动左/右滑动

我有一个ScrollView的测试活动,其中包含一个LinearLayout,然后包含200个自定义RelativeLayout对象,并且它表现完美。

但它真的必须存在于ListView中,所以我实现了一个自定义的ArrayAdapter并返回我的自定义RelativeLayout对象:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  final Transaction transaction = getItem(position);

  if (convertView == null) {
    convertView = new SlidingCellView(getContext());
    cellViews.add((SlidingCellView) convertView);
  }

  ((SlidingCellView) convertView).update(new SlidingCellView.SlidingCellViewResources() {
        @Override
        public String getSlidingCellName() {
            return transaction.getText();
        }
    });

    return convertView;
}

问题在于,当我这样做时,即使列表中只有100个元素,我的表现也会非常糟糕。当我将SlidingCellView拖动/滑动到侧面时,我得到了锯齿状的动作,我在我的200元素ScrollView / LinearLayout测试中没有得到它。

为什么会这样?为什么差异,我可以做些什么来解决这个问题吗?

谢谢你 索伦

1 个答案:

答案 0 :(得分:0)

RecyclerView解决了ListView在处理构成列表的各个视图中内部视图的点击和触摸时遇到的许多问题。实际上,在几乎所有情况下,您都应该更喜欢使用RecyclerView滚动列表。

关于如何使用RecyclerView,有很多很棒的教程。放在这里太过分了。