현재 레이아웃 구조는
<ScrollView>
<ViewPager>
</ViewPager>
</ScrollView>
이며, ViewPager의 내용은 각각 listview를 담고 있는 fragment입니다.
아래는 해당 어댑터를 구현한 코드입니다.
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Object instantiateItem(ViewGroup container, int position) {
if(fragmentList.size() < 4)
viewPager.setOffscreenPageLimit(position);
return super.instantiateItem(container, position);
}
@Override
public Fragment getItem(int i) {
Bundle bundle = new Bundle();
Fragment fragment = new BookListFragment();
String mode = "";
switch (i) {
....
}
bundle.putString("mode", mode);
fragment.setArguments(bundle);
fragmentList.add(fragment);
return fragment;
}
@Override
public int getCount() {
return 4;
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
switch (i) {
case 0:
hometab1.setSelected(true);
hometab2.setSelected(false);
hometab3.setSelected(false);
hometab4.setSelected(false);
//homeScroll.scrollTo(0, 0);
break;
case 1:
hometab1.setSelected(false);
hometab2.setSelected(true);
hometab3.setSelected(false);
hometab4.setSelected(false);
//homeScroll.scrollTo(0, 0);
break;
case 2:
hometab1.setSelected(false);
hometab2.setSelected(false);
hometab3.setSelected(true);
hometab4.setSelected(false);
//homeScroll.scrollTo(0, 0);
break;
case 3:
hometab1.setSelected(false);
hometab2.setSelected(false);
hometab3.setSelected(false);
hometab4.setSelected(true);
//homeScroll.scrollTo(0, 0);
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
그리고 아래의 그림은 현재 레이아웃을 간략히 표현한 그림인데요..

여기서 문제가, viewpager에서 가로로 page를 넘기면
viewpager의 콘텐츠(여기서는 BookListFragment죠.)가 화면에 표시되면서
바깥쪽 스크롤뷰가 파란부분까지 스크롤이 됩니다 ..

위 그림처럼 viewpager가 화면의 맨 위에 위치하도록 스크롤이 자동으로 되버립니다 ...
BookListFragment 에서 하는 작업은 웹 요청으로 목록을 받아온 다음
listview에 어댑터를 붗여주고 notifyDataSetChanged() 를 한번 호출합니다.
여기저기 원본 소스도 살펴봤지만 원인을 모르겠네요..