2016-09-20 166 views
0

我试图实现一些自定义ListView的逻辑。在其OnTouchListeneronTouch()方法中,我检查是否符合某些条件,如果符合,则根据用户的手指正在移动的方向向上/向下滚动ListView。现在,当我向下滚动ListView以显示底部的新项目时,那些项目不会出现。每次拨打scrollTo()时,我都会尝试拨打ArrayAdapter.notifyDataSetChanged(),但它不起作用。我也搜索了这个问题,但我找不到一个坚实的解决方案/解释。Android scrollTo()不显示ListView的新项目

下面是一些代码示例:

@Override public boolean onTouch(final View v, MotionEvent event) { 
       //Some code 

       switch (event.getAction()) { 
        case MotionEvent.ACTION_MOVE: 
         deltaY = event.getRawY() - downY; 
         if(//Some condition) { 
         listView.scrollTo(0, (int) -deltaY); 
         isScrolling = true; 
       } 
       break; 
      } 

回答

1

请尝试做scrollTo等待notifyDataSetChanged后一秒钟。

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     listView.scrollTo(0, (int) -deltaY); 
    } 
}, 300) 
+0

谢谢,我想这一点,但它仍然无法正常工作 –

1

您可以使用scrollListBy,而不是scrollTo。但是使用这个限制,你只能在KitKat版本以上使用它。使用这样的: -

listView.post(new Runnable() { 
    @Override 
    public void run() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      listView.scrollListBy((int) -deltaY); 
     } 
    } 
}); 
+0

谢谢,但我真的不能依靠,因为我需要它以较低的版本太 –

+0

嘿工作,我已经寻找解决这个问题下面的** KitKat **,但我什么也没有:( –

+0

谢谢你的尝试,我明白了:) @Rahul Sonpaliya –