검토:ScrollView 에 ListView 를 삽입 하 는 방법

분석
1.가장 간단 한 레이아웃:ListView 하나만 있 음
전체 페이지 에 ListView 가 하나 밖 에 없다 면 ListView 자체 가 스크롤 효 과 를 가지 고 있 기 때문에 불 러 온 데이터 가 페이지 에 표 시 된 범 위 를 초과 할 때 상하 미끄럼 을 통 해 모든 item 을 볼 수 있 습 니 다.따라서 이 경우 ScrollView 를 추가 할 필요 가 없다.
2.다른 레이아웃 A+ListView
이러한 상황 에서 만약 에 레이아웃 A 가 ListView 의 앞 에 정의 되면 레이아웃 A 가 차지 하 는 비례 가 크 거나 ListView 가 불 러 온 데이터 가 많 을 때 ListView 의 표시 가 불완전 하 게 나타 날 수 있 습 니 다.마찬가지 로 ListView 자체 가 스크롤 할 수 있 기 때문에 상하 스크롤 을 통 해 ListView 의 모든 item 을 볼 수 있 습 니 다.그림 에서 보 듯 이:

 
3.다른 레이아웃 B+ListView
이러한 상황 에서 레이아웃 B 가 ListView 의 뒤에 정의 된다 고 가정 하면 두 가지 상황 이 발생 한다.(1)ListView 가 불 러 온 데이터 가 많 지 않 고 ListView 의 모든 항목 을 완전히 표시 할 수 있다.그러면 뒤에 충분 한 공간 이 있다 면 레이아웃 B 는 정상적으로 표 시 될 수 있다.(2)、ListView 가 불 러 온 데 이 터 를 많이 추가 하면 레이아웃 B 에 남 겨 진 공간 이 부족 하거나 아예 없 거나 레이아웃 B 가 불완전 하거나 전혀 표시 되 지 않 습 니 다.어쨌든 ListView 자체 의 내용 은 미끄럼 을 통 해 볼 수 있다.
세 번 째 경우 레이아웃 을 다시 고려 하지 않 으 면 스크롤 뷰 를 추가 하여 남 은 페이지 의 내용 을 볼 수 있 도록 해 야 합 니 다.
 
2.ScrollView 와 ListView 의 충돌 문제
1.ListView 에 안 드 로 이 드:layot 를 설정 하 는 높이 를 지정 합 니 다.height="240 dip",그러면 해결 할 수 있 고 미관 에 영향 을 줄 수 있 습 니 다.그림 에서 보 듯 이:

2.밖 에 ScrollView 를 추가 하면 문제 가 생 길 수 있 습 니 다.그림 에서 보 듯 이:

3.ScrollView 에 속성 설정:android:fillViewport="true"테스트 를 할 때 ListView 에 불 러 온 데이터 가 많 지 않 으 면 해결 할 수 있 지만 ListView 에 불 러 온 데이터 가 많 을 때 완전히 표시 되 지 않 고 이 때 ListView 자체 도 스크롤 할 수 없습니다.3.해결 방법 은 두 가지 가 있 습 니 다.1.listview 의 총 높이 를 계산 하고 ListView listView=(ListView)findViewById(id)를 설정 합 니 다.Your Adapter adapter=new MyAdapter("어댑터 초기 화");listView.setAdapter(adapter);setListViewHeightBasedOnChildren(listView);(setAdapter 후 사용자 정의 방법 을 호출 합 니 다)

/**
* @param listView
*/
private void setListViewHeightBasedOnChildren(ListView listView) {

ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}

int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
이 방법 을 사용 하려 면 주의해 야 합 니 다.하위 ListView 의 모든 Item 은 LinearLayout 이 어야 합 니 다.다른 Layout(예 를 들 어 RelativeLayout)가 onMeasure()를 다시 쓰 지 않 았 기 때문에 onMeasure()에서 이상 을 던 집 니 다.2.ListView 를 사용자 정의 하고 onMeasure()방법 을 다시 불 러 옵 니 다.모든 디 스 플레이

package com.meiya.ui;

import android.widget.ListView;

/**
*
* @Description: scrollview listview
*
* @File: ScrollViewWithListView.java
*
* @Paceage com.meiya.ui
*
*
* @Date 03:02:38
*
* @Version
*/
public class ScrollViewWithListView extends ListView {

public ScrollViewWithListView(android.content.Context context,
android.util.AttributeSet attrs) {
super(context, attrs);
}

/**
* Integer.MAX_VALUE >> 2, ,
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);

}

}
이상 설정 하면 scrollView 에 listView 가 내장 되 어 있 는 listView 를 해결 할 수 있 습 니 다.그러나 첫 번 째 문 제 는 화면 에 들 어 갈 때 listview 의 items 를 동적 으로 불 러 온 후에 페이지 가 listview 의 첫 번 째 키 항목 으로 넘 어 가 는 것 입 니 다.이것 은 매우 아 프 고 어 쩔 수 없 이 어떻게 해결 해 야 할 지 모 르 겠 습 니 다.먼저

scrollView.post(new Runnable() { 
      // scrollview , runnable()
    @Override 
    public void run() { 
     scrollView.scrollTo(0, 0); 
     } 
   });
이 방법 으로 과도아 는 사람 이 있 으 면 솔 루 션 3,scrollView+LinearLayout 를 사용 하여 addView()방법 으로 목록 을 추가 하 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기