2014-05-31 5 views
2

Я пытаюсь добавить вид пейджер в ListView, но когда я пытаюсь изменить страницу вида пейджера это влияет на ListView жест я имею в виду жеста как ListView и пейджер работает вместеКак использовать viewpager в listview?

Но я wantthat, если я листать пейджера viewpgaer элемент управления ListView не будет прокручиваться, есть ли решение этой

я добавил вид пейджера в ListView успешно, но, пожалуйста, решить эту проблему :(. также пытаюсь добавить жест, но не увенчались успехом

спасибо

ответ

1

Возможное решение здесь: http://dallasgutauckis.com/2013/04/30/android-putting-a-viewpager-inside-a-listview/

Проблема с вводом в ViewPager внутри ListView является то, что он принимает только небольшое количество вертикальной (Y) дельта до ListView начинает потреблять события касания вместо делегирования для того, чтобы включить прокрутку ListView. Это нормально, но проблема часто возникает после того, как ViewPager уже начал обрабатывать смену страницы (при перетаскивании по горизонтали), создавая плохой пользовательский интерфейс, что приводит к неправильной разбивке на страницы и прокрутке двух видов.

Есть несколько способов попытаться справиться с этим.

  1. Вы не могли бы сделать это на всех (спасибо Дайан и Марк)
  2. Вы можете установить сенсорную слушателя на ListView и попытаться делегировать штрихи, на основании которых зрения вы считаете, что нужно, чтобы получить затрагивает и , какие действия необходимо предпринять на основе этих штрихов.
  3. Вы также можете комбинировать прослушиватель прикосновений с помощью GestureDetector, чтобы попытаться сделать сделать реализацию немного менее громоздкой. Проблема заключается в том, что в некоторых списках ListView наши макеты немного сложнее, чем отдельных строк текста. Если в макете элемента есть, например, кнопка , нам необходимо должным образом делегировать событие касания до кнопки. Это, очевидно, имеет серьезные последствия для реализации и тестирования. Чтобы избежать вышеупомянутых махинаций, I добавил OnPageChangeListener в ViewPager и на основании состояния пейджера , принудительно нажал делегат из Activity.

надуманный пример:

class MyActivity extends Activity { 
    private ViewPager mViewPager; 
    private View mTouchTarget; 

    @Override 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.example); 

     mViewPager = (ViewPager) findViewById(R.id.view_pager); 

     mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 

      private int mPreviousState = ViewPager.SCROLL_STATE_IDLE; 

      @Override 
      public void onPageSelected(int position) { 
       // NO-OP 
      } 

      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
       // NO-OP 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       // All of this is to inhibit any scrollable container from consuming our touch events as the user is changing pages 
       if (mPreviousState == ViewPager.SCROLL_STATE_IDLE) { 
        if (state == ViewPager.SCROLL_STATE_DRAGGING) { 
         mTouchTarget = mViewPager; 
        } 
       } else { 
        if (state == ViewPager.SCROLL_STATE_IDLE || state == ViewPager.SCROLL_STATE_SETTLING) { 
         mTouchTarget = null; 
        } 
       } 

       mPreviousState = state; 
      } 
     }); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     if (mTouchTarget != null) { 
      boolean wasProcessed = mTouchTarget.onTouchEvent(ev); 

      if (!wasProcessed) { 
       mTouchTarget = null; 
      } 

      return wasProcessed; 
     } 

     return super.dispatchTouchEvent(ev); 
    } 
} 

Теперь у нас есть ViewPager, который сохраняет контроль над сенсорными событиями после того, как страница начинает меняться и выпускает его, когда подкачка находится в режиме ожидания или оседание.

+0

могут использовать эту dispatchTouchEvent() метод в базовом adapater – user3683300

+0

, потому что мой пейджер в базе адаптер – user3683300

0

Я разместил этот аналогичный вопрос на другом месте.

Это идеальный вариант для меня, и он отлично выглядит. Попробуйте эту ссылку, и это может помочь вам и другим:

View Pager in listview?

Надежда эта ссылка помочь другим зрителям .. :)

Смежные вопросы