1

Я пытаюсь реализовать сортировку панели инструментов, но без панели инструментов (вместо панели инструментов это будет выпадающий элемент, который по существу является RelativeLayout, который имеет LinearLayout справа внизу (развернутые элементы в раскрывающемся списке), которые нависают над всей компоновкой после нажатия выпадающего меню.Свертывание элемента при прокрутке списка (Android)

Я думал о внедрении свертывающейся панели инструментов и опускании вниз на панель инструментов, но это, вероятно, не будет хорошей идеей поскольку drop down не является статическим компонентом, например, для изображения. Я также использую ActionBar в своем приложении, поэтому переход на панель инструментов будет, скорее всего, очень трудоемким, не говоря уже о тех технических проблемах, которые возникают с ним.

Кроме того, я думал об обнаружении движения/прокрутки в списке, а затем скрыть/показать выпадающее меню, но это очень плохо, когда я просто держу палец в списке (он сошел с ума и переключается с самого начала и наоборот очень быстро и не останавливается, пока я не подниму палец).

Есть ли другие варианты для реализации такого поведения? enter image description here

ответ

0

ListView имеет значение по умолчанию scrollListener. Вы можете использовать его, чтобы узнать, прокручивается ли он или нет. затем скройте dropDown!

 listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
        @Override 
        public void onScrollStateChanged(AbsListView absListView, int i) { 

    //detect stop. have a counter then view the dropDown 

        } 

        @Override 
        public void onScroll(AbsListView absListView, int i, int i1, int i2) { 

    //Hide dropDown 

@Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 

      if(mLastFirstVisibleItem<firstVisibleItem) 
      { 
       Log.i("SCROLLING DOWN","TRUE"); 
      } 
      if(mLastFirstVisibleItem>firstVisibleItem) 
      { 
       Log.i("SCROLLING UP","TRUE"); 
      } 
      mLastFirstVisibleItem=firstVisibleItem; 

     } 
        } 
       }); 
+0

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

+0

в порядке, funtionality-wise он работает. Однако даже с моей анимацией слияния/расширения выпадающего элемента кажется, что он исчезает и появляется внезапно. Не могли бы вы привести пример, как сделать его более плавным? как в сворачивающейся панели инструментов – BVtp

+0

Использование анимации - http://stackoverflow.com/questions/23925907/slidedown-and-slideup-layout-with-animation-android – lesniak

0

Мне очень любопытно, что другие предлагают, потому что я сражаюсь с этим некоторое время назад. Finnaly Я определяю направление движения/прокрутки в списке, а затем скрыть/показать заголовок (как вы упомянули). Я сделал это так (и у меня нет ошибки):

listView.setOnScrollListener(OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 

      final int currentFirstVisibleItem = view.getFirstVisiblePosition(); 

      if (currentFirstVisibleItem > mLastFirstVisibleItem) header.setVisibility(View.GONE); 
      else if (currentFirstVisibleItem < mLastFirstVisibleItem) header.setVisibility(View.VISIBLE); 

      mLastFirstVisibleItem = currentFirstVisibleItem; 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     } 
    }); 

I конец я сделал заголовок, чтобы показать/скрыть с анимацией.

+0

Что делать, если вы начинаете прокрутку, но затем вы держите палец в одном месте , и не поднимайте его. Разве он не переключается быстро между вниз вниз бесконечно, пока вы не поднимете палец? Он делает это в моем случае – BVtp

+0

Нет, он работает нормально – lesniak

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