2013-04-25 54 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,採取滾動

的控制