我用下面的例子來impliment我viewPager: http://code.google.com/p/viewpagerexample/issues/listPagerAdapter起始位置
這個例子的問題是,我無法弄清楚如何設置我的起始位置,默認的起始位置爲0基本上我無法控制它的左邊還是右邊有一個可用的視圖。
有沒有辦法控制中心的查看當前位置?有沒有更好的方法來做到這一點? 是否有可能使其成爲循環?
我用下面的例子來impliment我viewPager: http://code.google.com/p/viewpagerexample/issues/listPagerAdapter起始位置
這個例子的問題是,我無法弄清楚如何設置我的起始位置,默認的起始位置爲0基本上我無法控制它的左邊還是右邊有一個可用的視圖。
有沒有辦法控制中心的查看當前位置?有沒有更好的方法來做到這一點? 是否有可能使其成爲循環?
我已經找到一種方法來設置它的位置,它是在課堂外完成:
awesomePager = (ViewPager) findViewById(R.id.awesomepager);
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
,它可以通過計算我要適應它的項目的數量限制
我碰到一個問題就來了,由此,如果我設置當前項目之前,我設置適配器,我回去將永遠是一個在位0
做的第一個項目一定要做到:
awesomePager.setAdapter(awesomeAdapter);
awesomePager.setCurrentItem(CurrentPosition);
,而不是:
awesomePager.setCurrentItem(CurrentPosition);
awesomePager.setAdapter(awesomeAdapter);
我已經注意到,如果你重新創建活動(方向變化)和具有FragmentStatePagerAdapter ViewPager,則適配器將重新使用它的碎片。停止它的方式是:
@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 alwayes後打開0頁第一和setCurrentItem(CurrentPosition);不起作用。修正了被延遲後改變頁面:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(newPosition);
}
}, 100);
在'recreate()調用'後確實需要延遲! :) – Annihil 2018-01-13 15:16:01
@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;
}
我使用的3個片段,並在開始我的應用程序,第二個(中間)片段將被默認顯示。只是我使用onResume函數,並且所有的工作都很棒。
@Override
protected void onResume() {
super.onResume();
m_viewPager.setCurrentItem(1);
}
首先我這樣做的最後一個片段:
PagerAdapter pagerAdapter = new PagerAdapter();
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount() - 1);
我有大小1000餘數組和dymanic viewpager我面臨leftswipe憋屈firstload。下面的代碼解決了這個問題並導致了滾動:
@Override
onResume(){
super.onResume();
viewPager.setCurrentItem(newPosition);
}
我遇到了同樣的問題。 當我初始化ViewPager時,指示器位置爲0. 這可能取決於傳呼機內容的計算量。我使用下面的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);
}
}
這樣一來,也從未與延時時間設定麻煩。
請注意,如果'awesomeAdapter'由Cursor/LoaderManager支持,則需要注意何時調用'setCurrentItem'以避免竊取焦點(太遲)或根本無法移動頁面(太早) - 看到[這](http://stackoverflow.com/a/24174114/404960) – rymo 2014-06-12 14:46:42
沒有爲我工作,因爲我的其他片段還沒有準備好在那一點,我有一個例外,因爲我的應用程序試圖使用來自尚未創建的'currentPosition'片段的變量 – Zvi 2016-04-18 19:04:39
完美工作。 當片段準備就緒時,設置視圖分頁器可以正常工作,當片段準備就緒並且可以使用當前位置時試過。謝謝@Kirill – 2016-10-25 13:04:12