2013-08-02 2 views
1

У меня проблема в приложении для Android, до сих пор я не смог найти решение. Возможно, что-то очевидное, что мне не хватает, поэтому кто-то может предложить хорошее решение для меня.Dual GridView одновременная и синхронизированная прокрутка

Итак, в основном у меня есть две бок о бок GridViews в горизонтальной компоновке. Левый GridView - это один столбец, а правый GridView динамически адаптирует количество столбцов к экрану. В основном левый GridView представляет собой программно заполненный столбец заголовка строки для правильного GridView. Я сделал это так, потому что я строю таблицу с заданным количеством строк, но вместо горизонтальной прокрутки всех столбцов (число которых неизвестно, так как пользователь может добавить больше). Мне нужно, чтобы он доходил до края на экране, а затем создайте пустую строку, а затем заверните, чтобы продолжить работу с столбцами. Я начал с использования одного GridView и добавления информации заголовка в первый столбец, но я столкнулся со всеми проблемами с чрезвычайно сложным кодом, чтобы выяснить, где разместить какие данные в моем пользовательском адаптере, а также getCount() в моем адаптере, чтобы сделать убедитесь, что было создано правильное количество ячеек, включая пустые ячейки.

Теперь у меня есть два GridViews, и все работает именно так, как я хочу, чтобы он был отделен от прокрутки. Я хочу, чтобы два GridViews прокручивались вместе (или как можно ближе к одному и тому же времени), когда они прокручиваются. Вот мой код для скроллинга, который не работает, как ожидалось:

 mRightGrid.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 
      mLeftGrid.smoothScrollToPosition((firstVisibleItem/mRightGridColumns) + 1); 

     } 
    }); 



    mLeftGrid.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 
      mLeftGrid.smoothScrollToPosition((firstVisibleItem * mRightGridColumns) + 1); 

     } 
    }); 

Надеюсь, очевидно, что цель этого состоит в том, если есть 10 колонок в правой сетки и сетки прокручивается таким образом, что положение 30 (первая ячейка третьей строки) является первым видимым элементом, тогда левая сетка должна прокручиваться до позиции 2 (30/10 - 1 = 2), которая является ячейкой в ​​третьей строке левого вида сетки. Так что это не работает, как я и ожидал, и мне интересно, действительно ли есть способ оценить фактическую позицию y прокрутки каждый раз, когда сетка вообще перемещается, и применять ту же самую позицию y к другой сетке, которую я считаю будет действительно работать и давать хорошие синхронизированные результаты прокрутки.

+0

Возможно, вы сможете сделать это с помощью некоторой комбинации 'smoothScrollBy()' и 'getScrollY()' и отслеживания прокрутки y самостоятельно всякий раз, когда вы получаете обратный вызов onScroll. Честно говоря, я думаю, что делать это с одним GridView было бы лучше. Вы можете попробовать расширить GridView и отобразить представление поверх сетки, которая отображает левый столбец (сетка все еще имеет этот первый столбец, но если прокручивать по горизонтали, наложение будет выглядеть похоже, что левая колонка никогда не перемещается) – Karakuri

ответ

1

Итак, я закончил тем, что кусал пулю и возвращался к одному виду сетки и сражался за сложный код, так как независимо от того, что я пробовал с прокруткой, всегда было отставание до того, как другая сетка догнала, и я просто не мог найти способ плавно прокручивать оба вида сетки одновременно.

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