【发布时间】:2013-05-02 06:50:54
【问题描述】:
我正在使用 viewpager 跨多个页面显示一些文本。我正在尝试获取当前视图并选择一个新页面。我想要获取当前视图的原因是因为基于页码我正在更改某些视图组件的一些属性,例如 textview、image 等。 我正在使用下面的代码来做同样的事情
ViewPager mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
View CurrView;
OnPageChangeListener pageChangelistener = new OnPageChangeListener() {
@Override
public void onPageSelected(int pageSelected) {
currView = mPager.getChildAt(mPager.getCurrentItem());
myTextView = (TextView)currView.findViewById(R.id.myTextView);
loadBookmarkSetting(pageSelected);//do some changes in myTextView properties based on the page number }
mPager.setOnPageChangeListener(pageChangelistener);
现在我面临的问题是,在我滚动 3 页之后,当我来到第 4 页时,我在“myTextView = (TextView)currView.findViewById(R.id.myTextView);”这一行上得到空指针异常。这是因为 currView 为空。如果我在这里做错了任何想法。有没有其他方法可以在 viewpager 中捕获当前视图(页面),以便我可以根据我所在的页码对视图进行更改?
【问题讨论】:
-
我认为你应该在这里调试:
mPager.getChildAt(mPager.getCurrentItem());为什么它返回 null? -
使用此答案获取当前视图stackoverflow.com/a/8638772/527759
-
@user527759:您共享的线程中的 sloution 适用于寻呼机适配器。但是,我正在使用 FragmentStatePagerAdapter。该方法将返回一个无法转换为查看的 Fragment 对象,因此建议的代码将不起作用
-
你可以保存当前片段并使用
Fragment.getView() -
尝试这样做,但由于我收到 classcast 异常而无法获取片段对象。
标签: android