2013-04-25 53 views
0

目前我使用ListView和它的正常工作。但我有一个ListView文本,就像一个段落,我只是想显示这两行文本,并使其他文本滚动,但我有一个问题,如果我让TextView滚动内ListView ,那么TextView获得其父(ListView)的重点,不会让它滚动。列表查看项目滚动能够垂直

所以,我能实现这个滚动TextView功能,不会干扰ListView的滚动性能?

谢谢。

回答

1

没有什么是不可能的,但做事情的方式可能很难。直接这件事情不能实现,但间接是可以实现的,是的,我实现了。 我如何实现有点复杂,但是会分享,我是如何实现的。

ListView当我上Textview点击I嵌段列表视图的触摸模式,使得它们的TOCH方法不拦截对方,并且可以通过使用requestDisallowInterceptTouchEvent(true); 该块的父的TouchListener进行(ListView )。

现在,当点击TextView我允许其触摸听者也setMovementMethod() 但运动我犯了一个自定义类和类是继

public class myScrollMethod extends ScrollingMovementMethod { 

    @Override 
    public void onTakeFocus(TextView widget, Spannable text, int dir) { 
     // TODO Auto-generated method stub 
     super.onTakeFocus(widget, text, dir); 
    } 

    @Override 
    public boolean onKeyDown(TextView widget, Spannable buffer, 
      int keyCode, KeyEvent event) { 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_DPAD_DOWN: 
      for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { 
       down(widget, buffer); 
      } 
      return true; 
     case KeyEvent.KEYCODE_DPAD_UP: 
      for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { 
       up(widget, buffer); 
      } 
      return true; 
     default: 
      return super.onKeyDown(widget, buffer, keyCode, event); 
     } 
    } 

    private int getScrollAmount(TextView widget) { 
     final int visibleLineCount = (int) ((1f * widget.getHeight())/widget 
       .getLineHeight()); 
     int scrollAmount = visibleLineCount - 1; 
     if (scrollAmount < 1) { 
      scrollAmount = 1; 
     } 
     return scrollAmount; 
    } 


} 

后,当我在父点击我启用TouchIntercepter的父设置为真,并获得其父,并开始滚动。

通过这种方式,我已经成功地实现了这一要求

1

你所想达到真正是不可能的。操作系统如何知道您正在尝试滚动列表与列表行段落?您实质上需要在实际列表本身可以滚动之前滚动到列表行段落的底部。这让用户感到困惑,而不是普通的用户体验。我建议你看一下ExpandableListView。它允许你有每行的折叠版本,在你的情况下,每行列表只有2行文本。当用户点击该行时,它可以扩展为完整的段落形式,并且该列表可以一直滚动。有很多教程你应该能够在网上找到。

4

我能够做到这一点通过以下方式:

进入ListAdapter的getView方法获得该行的TextView的对象,并写出

textView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     v.getParent().getParent().requestDisallowInterceptTouchEvent(true); 
     return false ; 
    } 
}); 

时,你会接触到的TextView,采取滚动

的控制