PagerAdapter 시작 위치
내 viewPager를 구현하기 위해 다음 예제를 사용하고 있습니다. http://code.google.com/p/viewpagerexample/issues/list
이 예제의 문제는 시작 위치를 설정하는 방법을 알 수 없다는 것입니다. 기본 시작 위치는 0입니다. 기본적으로 왼쪽 또는 오른쪽에 사용 가능한보기가 있는지 제어 할 수 없습니다.
센터의 현재 위치를 볼 수있는 방법이 있습니까? 더 나은 방법이 있습니까? 원형으로 만들 수 있습니까?
클래스 외부에서 수행되는 위치를 설정하는 방법을 찾았습니다.
awesomePager = (ViewPager) findViewById(R.id.awesomepager);
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
여기에 맞추고 싶은 아이템의 양을 계산하여 제한 할 수 있습니다.
FragmentStatePagerAdapter가있는 ViewPager를 사용하여 Activity (방향 변경)를 다시 생성하면 Adapter가 Fragments를 다시 사용한다는 것을 알았습니다. 중지하는 방법은 다음과 같습니다.
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
if (viewPager != null) {
// before screen rotation it's better to detach pagerAdapter from the ViewPager, so
// pagerAdapter can remove all old fragments, so they're not reused after rotation.
viewPager.setAdapter(null);
}
super.onSaveInstanceState(savedInstanceState);
}
그러나 활동 레크리에이션 후에 ViewPager는 항상 페이지 0을 먼저 열고 setCurrentItem (CurrentPosition); 작동하지 않습니다. 지연 후 페이지가 변경되는 문제 수정 :
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(newPosition);
}
}, 100);
마지막 조각으로 시작하기 위해 다음을 수행했습니다.
PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);
어댑터를 설정하기 전에 현재 항목을 설정하면 반환되는 첫 번째 항목이 항상 위치 0에있는 항목이되는 문제가 발생했습니다.
다음 사항을 확인하십시오.
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
그리고 아닙니다 :
awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);
나는 1000보다 큰 크기의 배열을 가지고 있으며 동적 뷰 페이지에서 나는 firstload에 붙어있는 leftswipe에 직면했습니다. 아래 코드는이 문제를 해결하고 부드러운 스크롤을 가져 왔습니다.
@Override
onResume(){
super.onResume();
viewPager.setCurrentItem(newPosition);
}
3 개의 조각을 사용하고 있으며 앱을 시작할 때 두 번째 ( 중간 ) 조각이 기본적으로 표시됩니다. onResume 기능을 사용하고 있으며 모두 훌륭하게 작동합니다.
@Override
protected void onResume() {
super.onResume();
m_viewPager.setCurrentItem(1);
}
나는 같은 문제가 발생했습니다. ViewPager를 초기화 할 때 표시기 위치는 0이었습니다. 이것은 Pager 내용을 계산하는 양에 따라 달라질 수 있습니다. 나는 아래와 같이 ViewTreeObserver를 사용합니다.
mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mViewPager.setCurrentItem(newPosition);
removeOnGlobalLayoutListener(mSlidingTabLayout.getViewTreeObserver(), mGlobalLayoutListener);
}
};
mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
과,
private void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) {
if (observer == null) return;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
observer.removeGlobalOnLayoutListener(listener);
} else {
observer.removeOnGlobalLayoutListener(listener);
}
}
이런 식으로 지연 시간 설정에 신경 쓰지 마십시오.
@Override
public Object instantiateItem(ViewGroup container, int position) {
View currentPage = null;
switch(position){
case 0:
currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)
break;
case 1:
currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)
///////////// This page will be default ////////////////////
((ViewPager)container).setCurrentItem(position);
////////////////////////////////////////////////////////////
break;
case 2:
currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)
break;
return currentPage;
}
사용하여 viewPager.setCurrentItem(newPosition);
사용자에게 쇼를에 시작 페이지에서 전환 newPosition
, 일어나는 것을 방지하고이 보여 newPosition
그 출발점 인 것처럼 직접, 내가 추가 한 false
이 같은 두 번째 매개 변수의 뭔가 :
int newPosition = pages.size()-1; // Get last page position
viewPager.setCurrentItem(newPosition, false); // 2nd parameter (false) stands for "smoothScroll"
참고 URL : https://stackoverflow.com/questions/11879315/pageradapter-start-position
'Program Tip' 카테고리의 다른 글
Devise로 사용자를 "소프트 삭제"하는 방법 (0) | 2020.11.09 |
---|---|
Highcharts 세로 막 대형 차트 내에서 각 범주의 색상을 어떻게 변경합니까? (0) | 2020.11.09 |
목록에서 숫자의 누적 합계를 찾는 방법은 무엇입니까? (0) | 2020.11.09 |
Swift- 푸시 알림 배지 번호를 제거 하시겠습니까? (0) | 2020.11.09 |
RequireJS : 단일 "클래스"를 포함하는 모듈을 정의하는 방법은 무엇입니까? (0) | 2020.11.09 |