목록보기의 내용을 검색하는 검색 기능이있는 활동을 구현하고 싶습니다. 검색 표시 줄은 목록보기 상단에 있어야하며 사용자가 목록보기를 아래로 스크롤하면 숨겨져 야합니다. 그리고 그가 무언가를 검색 할 때, 그것은 항상 목록보기의 맨 위에 있어야합니다 !!! 어떻게 구현할 수 있습니까? 친애하는!
ListView 위에 SearchView를 사용하여 XML 레이아웃을 만드는 방법을 알고 있다고 가정합니다. 수직 LinearLayout 안에 배치 할 수 있습니다. 까다로운 부분은 SearchView를 조작하는 방법입니다.
다음과 같이 ListView에 리스너를 등록 할 수 있습니다.
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case SCROLL_STATE_IDLE:
//scroll was stopped, let's show search bar again
break;
case SCROLL_STATE_TOUCH_SCROLL:
//user is scrolling, let's hide search bar
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem > 0) {
//user scrolled down, first element is hidden
}
}
});
보시다시피 상태 변경에 대한 알림을 받게되며 터치 이벤트 중에 검색보기를 숨기려면 사용할 수 있습니다. 또는 보이는 요소가 변경되는 것을들을 수 있습니다. 이 간단한 if 문 검사 firstVisibleItem > 0
는 사용자가 아래로 스크롤했을 때 알려줍니다. 사라지는 목록 항목을 추적하고 항목이 표시되거나 숨겨 질 때마다 반응 할 수도 있습니다.
스크롤 변경을 수신하는 또 다른 방법은 ListView를 확장하고 onScrollChanged()
메서드를 재정의 하는 것입니다.
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
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
for (Callbacks c : mCallbacks) {
c.onScrollChanged(l - oldl, t - oldt);
}
}
@Override
public int computeVerticalScrollRange() {
return super.computeVerticalScrollRange();
}
public void addCallbacks(Callbacks listener) {
if (!mCallbacks.contains(listener)) {
mCallbacks.add(listener);
}
}
public static interface Callbacks {
public void onScrollChanged(int deltaX, int deltaY);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다