어떻게 프로그래밍 방식으로 특정 위치로 스크롤 할 수 ListView
있습니까?
예를 들어,가 있고 String[] {A,B,C,D....}
의 맨 위에 보이는 항목 ListView
을 my의 인덱스 21 로 설정해야합니다 String[]
.
어떻게 프로그래밍 방식으로 특정 위치로 스크롤 할 수 ListView
있습니까?
예를 들어,가 있고 String[] {A,B,C,D....}
의 맨 위에 보이는 항목 ListView
을 my의 인덱스 21 로 설정해야합니다 String[]
.
답변:
직접 스크롤의 경우 :
getListView().setSelection(21);
부드러운 스크롤 :
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
작동하지 않습니다, 어떤 제안?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
매개 변수
position->
오프셋 으로 스크롤 할 위치 ----> 스크롤이 완료 될 때 뷰의 상단에서 원하는 위치의 픽셀 단위 거리-> 스크롤
에 사용할 밀리 초 수
참고 : API 11부터
HandlerExploit의 대답은 내가 찾던 것이었지만 내 목록보기는 상당히 길며 알파벳 스크롤러도 있습니다. 그런 다음 동일한 함수가 다른 매개 변수를 취할 수 있음을 발견했습니다. :)
편집 : (AFD 제안에서)
현재 선택을 배치하려면
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
다음과 같이 코드를 핸들러에 넣습니다.
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
그런 다음이 방법을 호출하십시오.
timerDelayRunForScroll(100);
건배!!!
OnGroupExpandListener를 설정하고 onGroupExpand ()를 다음과 같이 재정의했습니다.
setSelectionFromTop () 메서드를 사용하여 선택한 항목을 설정하고 선택 항목을 ListView의 위쪽 가장자리에서 y 픽셀만큼 배치합니다. (터치 모드 인 경우 항목이 선택되지 않지만 여전히 적절하게 배치됩니다.) (Android 문서)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Listview
표시되지 다음이를 사용하는 경우 스크롤이 스크롤에 기본적으로 상단에 위치하지만, 원하는 될 것입니다 :
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Gmail 앱과 유사한 기능을 찾는 사람이 있다면
Listview 스크롤은 기본적으로 맨 위에 위치합니다. 힌트 주셔서 감사합니다. amalBit. 빼기 만하면됩니다. 그게 다야.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
UP / DOWN 버튼을 사용하여 스크롤 목록보기
누군가 목록 처리에 관심이 있다면 버튼을 사용하여 한 행을 위 / 아래로 봅니다. 그때.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
이것이 나를 위해 일한 것입니다. amalBit & Melbourne Lopes의 답변 조합
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
그런 다음이 메소드를 다음과 같이 호출하십시오.
timerDelayRunForScroll(400);
listView의 스크롤 위치를 정확하게 정의하려면 두 가지가 필요합니다.
현재 listView 스크롤 위치를 가져 오려면 :
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
listView 스크롤 위치를 설정하려면
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
두 가지 다른 버튼을 사용하여 위아래로 스크롤 할 수있는이 솔루션을 찾았습니다.
@Nepster가 제안한대로 getFirstVisiblePosition () 및 getLastVisiblePosition ()을 사용하여 프로그래밍 방식으로 스크롤을 구현하여 현재 위치를 가져옵니다.
final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
.....
if (list.size() > 0) {
ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
}else{
lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());
}
}
});
bnt = (ImageButton) findViewById(R.id.up_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getFirstVisiblePosition()>0){
lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
}else{
lwresult.smoothScrollToPosition(0);
}
}
});
}