lyr*_*cat 23 android android-viewpager
所以看来使用ViewPager时,将使用onPageSelected听者不会被调用第一页相同的问题,因为这个.
我有一些逻辑,为当前选定的页面填充一些更昂贵的UI元素,这在页面更改时有效,但是 it doesn't work for the first page.
如果我在侦听器之后设置当前项,则会为第一页触发回调,但视图尚未初始化,因此我无法操作它:
// Inside PagerAdapter.instantiateItem
ViewHolder vh = new ViewHolder();
cursor.moveToPosition(position);
vh.view = adapter.newView(context, cursor, null);
// Set position as tag so we can retrieve it with findViewByTag
vh.view.setTag(position);
((ViewPager) collection).addView(vh.view,0);
return vh;
// Inside MyActivity.onCreate
pagerAdapter = new SingleMessagePagerAdapter(this, cursor);
pager = (ViewPager)findViewById(R.id.message_pager);
pager.setAdapter(pagerAdapter);
pager.setOnPageSelectedListener(this);
pager.setCurrentItem(selectedItem);
// Inside MyActivity.onPageSelected
// Retrieve tagged view
View view = pager.findViewWithTag(position);
Run Code Online (Sandbox Code Playgroud)
这里view
最终为null因为PagerAdapter.instantiateItem
尚未运行.所以我想我的问题是,在活动生命周期的哪一点,我可以确定ViewPager已经初始化了视图?我尝试在里面做这个Activity.onAttachedToWindow
,Activity.onResume
但看起来这两个都被解雇了PagerAdapter.instantiateItem
.
小智 2
尝试使用碎片!
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter() {
super(getSupportFragmentManager());
}
@Override
public Fragment getItem(int i) {
Fragment fr = null;
if (i==0)
fr = new sec0frag();
else if (i==1)
fr = new sec1frag();
else if (i==2)
fr = new sec2frag();
return fr;
}
@Override
public int getCount() {
return 3;
}
}
Run Code Online (Sandbox Code Playgroud)
并创建3个fragment类
例如:
public static class sec0frag extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// here is initialize for first time to view pages.!
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12827 次 |
最近记录: |