마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

viewpager 사용시 자동으로 스크롤이 됩니다.

0 추천

현재 레이아웃 구조는

<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() 를 한번 호출합니다.

 

여기저기 원본 소스도 살펴봤지만 원인을 모르겠네요..

모나미153 (17,540 포인트) 님이 2015년 12월 23일 질문

2개의 답변

0 추천
 
채택된 답변

와! 찾았습니다..

한 2일 동안 삽질했네요

 

 

android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"

요 코드를 ScrollView의 바로 아래 있는 ViewGroup(LinearLayout, FrameLayout 등등) 1개에만 속성을 추가해주시면! ViewPager로 좌우 스크롤해도 ScrollView가 상,하로 자동 움직이는 버그가 사라집니다!

 

올레!

mOn (570 포인트) 님이 2016년 1월 5일 답변
모나미153님이 2016년 1월 5일 채택됨
감사합니다~~
내일 해봐야겠어요 ㅋㅋ
0 추천
모나미님 혹시 해결 하셨나요?

저랑 완전 똑같은 상황이네요... 도저히 모르겠고;;

거기다가 StackOverFlow에 어떻게 검색해야될지도 모르것네요 ㄷㄷ..

 

누군가 답변좀 해주세욤 ㅠㅠ
mOn (570 포인트) 님이 2016년 1월 5일 답변
...