2013-12-03 6 views
0

У меня есть ListView, в число которых входят EditText. Каждый edittext имеет многострочный, но высота строки ограничена. Таким образом, мне нужно прокрутить в edittext. Я ищу множество решений, но это не удалось.Scroll edittext in listview

ответ

0

TouchEvent в этом случае обрабатывается ListView, и он не передается детям. Вы можете переопределить onInterceptTouchEvent и вернуть от него ложь, а затем сенсорное событие будет передано детям (EditText).

public class myListView extends ListView { 
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 
    return false; 
} 
} 

Примечание: Если вы передадите touchEvent ребенку, вы не сможете прокручивать ListView. Поэтому в зависимости от вашего требования вы должны решить, когда вернуть false из onInterceptTouchEvent.

ссылка: http://developer.android.com/training/gestures/viewgroup.html

+0

Когда я использую ваш метод, список не может прокручиваться. Я хочу прокрутить вот так: - Если edittext имеет многострочный формат, который нужно прокрутить, чтобы посмотреть все, он будет прокручиваться внутри edittext. Когда он прокрутится до конца edittext, свиток будет возвращен в список. - Если я прокручиваю текст edittext (edittext, который я начинаю прокручивать), прокрутка также возвращается в listview – lolyoshi

+0

Я не уверен, но я думаю, что следующее может работать. 1. Создайте каждый элемент списка как свое собственное пользовательское представление. 2. Для каждого пользовательского представления, кроме EditText (для которого вы хотите обработать touchEvent), передайте touchEvent в ListView. – dinesh

+0

В это время каждый элемент списка включает edittext, imagebutton и textview. Если я касаюсь вида, кроме edittext, я могу прокрутить список в обычном режиме. Проблема просто возникает, когда я касаюсь области, содержащей edittext. – lolyoshi

0

Используйте этот обычай ListView я имел такую ​​же проблему, которую я решить, используя следующий код.

public class Mylistview extends ListView{ 

     public Mylistview(Context context) { 
      super(context); 
     } 

     public Mylistview(Context context, AttributeSet attrs) { 
       super(context, attrs); 
      } 

      public Mylistview(Context context, AttributeSet attrs, int defStyle) { 
       super(context, attrs, defStyle); 
      } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent ev) { 
      final int action = ev.getAction(); 
      switch (action) 
      { 
       case MotionEvent.ACTION_DOWN: 
         Log.i("VerticalScrollview", "onInterceptTouchEvent: DOWN super false"); 
         super.onTouchEvent(ev); 
         break; 

       case MotionEvent.ACTION_MOVE: 
         return false; // redirect MotionEvents to ourself 

       case MotionEvent.ACTION_CANCEL: 
         Log.i("VerticalScrollview", "onInterceptTouchEvent: CANCEL super false"); 
         super.onTouchEvent(ev); 
         break; 

       case MotionEvent.ACTION_UP: 
         Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false"); 
         return false; 

       default: Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action); break; 
      } 

      return false; 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent ev) { 
      super.onTouchEvent(ev); 
      Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction()); 
      return true; 
     } 

}