2016-09-20 167 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 –