gpt4 book ai didi

android - onPageSelected 在调用 onCreateView 之前运行?

转载 作者:行者123 更新时间:2023-11-30 00:21:58 27 4
gpt4 key购买 nike

我正在使用 ViewPager 循环浏览一组 fragment ,我想在每个 fragment 滑到屏幕上后对其进行更新。基本上,我希望文本在 fragment 稳定后“淡入”。

我尝试使用 fragment 的 onStartonResume 方法,虽然这适用于大多数页面,但它不适用于第二页,因为对于任何愚蠢的因为,第一页和第二页同时调用了它们的 onStart/onResume 方法(在第二页到达屏幕之前)。

现在我试图让它与 onPageChangeListener 的 onPageSelected 回调一起工作。该方法如下所示:

@Override
public void onPageSelected(final int position) {
mCurrentPosition = position;

PageFragment fragment = (PageFragment) ((MainActivity.ScreenSlidePagerAdapter) mViewPager.getAdapter()).getItem(position);

fragment.onSelect();

}

fragment 中的onSelect 方法如下所示:

public void onSelect(){

new android.os.Handler().postDelayed(
new Runnable() {
public void run() {

mSwitcher.setText("");

mNum = getArguments() != null ? getArguments().getInt("num") : 1;
Media currentMedia = slideshow.getMedia().get(mNum);

mSwitcher.setText(currentMedia.getDisplayName());
}
},
4000);
}

这种方式的问题是行 mSwitcher.setText(""); 抛出一个 NullPointerException

java.lang.NullPointerException:尝试在空对象引用上调用虚方法“void android.widget.TextSwitcher.setText(java.lang.CharSequence)”

这表明该类中的 onCreateView 方法尚未运行,因为这是实例化 mSwitcher 变量的地方。这对我来说似乎很疯狂,因为此时 View 已经滑到屏幕上了。

任何有关如何解决此问题的想法将不胜感激。这是我的第一次 Android 体验,整整一周我都在尝试解决这个愚蠢的文本淡入问题,但没有成功。在这一点上,我几乎准备放弃移 Action 为一个平台,因为到目前为止每一个小的改变都是多么痛苦。

最佳答案

ViewPager 将下一页保存在内存中,这是它的默认行为。您可以通过调用来调整它:

viewPager.setOffscreenPageLimit(2);

但是这可能没有用,因为如果您在上面的方法中传递 0,viewPager 将忽略它。

你正朝着正确的方向前进。我相信现在问题出在您的 ScreenSlidePagerAdapter 中。在 getItem(int position) 你可能有类似的东西

if(position == 1)
return new PageFragment();

而是将适配器更改为如下内容,

public class ScreenSlidePagerAdapter extends FragmentPagerAdapter {

private List<Fragment> mFragments = new ArrayList<>();

public ScreenSlidePagerAdapter(FragmentManager fm, List<Item> items) {
super(fm);

for (Item item : items) {
mFragments.add(new PageFragment());
}
}


@Override
public int getCount() {
return mFragments.size();
}

@Override
public Fragment getItem(int position) {
return mFragments.get(position); // Return from list instead of new PagerFragment()
}
}

关于android - onPageSelected 在调用 onCreateView 之前运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com