gpt4 book ai didi

android - 我可以在viewPager中使用setCurrentItem并使用onPageSelected吗?

转载 作者:行者123 更新时间:2023-11-29 18:08:33 26 4
gpt4 key购买 nike

我的问题是最初直接加载 fragment 并且我想调用一个方法 fragment 对用户可见。

为了加载正确的 fragment ,我在 onCreate 中使用了 viewPager.setCurrentItem()。它运行良好。

FragmentActivity代码:

public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mTabsAdapter = new TabsPlayerAdapter(this, mRadioList);
mMainViewPager.setAdapter(mTabsAdapter);
mMainViewPager.setOnPageChangeListener(this);
mMainViewPager.setCurrentItem(2);
}

对于一个名为 Current fragment 的方法,我使用了 onPageSelected viewPager。它运行良好。

FragmentActivity代码:

@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected - position: " + position);
((PlayerFragment) mTabsAdapter.mSparseFragment.get(position))
.startAnnimation();
}

FragmentStatePagerAdapter代码:

@Override
public Fragment getItem(final int position) {
Log.d(TAG, "getItem - position: " + position);
Bundle args = new Bundle();
args.putString("num", mRadioModel.get(position).name);
mSparseFragment.put(position, Fragment.instantiate
(mContext,PlayerFragment.class.getName(), args));
return mSparseFragment.get(position);
}

FragmentStatePagerAdapter 代码:

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
Log.d(TAG, "destroyItem - position: " + position);
mSparseFragment.remove(position);
}

我可以分别做这两件事。但是,当我尝试将两者结合使用时,在调用我的 fragment 时出现了 "NullPointerException"
我看到 onPageSelected 在我的 Adapter 中的 getItem 之前被调用。

最佳答案

解决方法很简单:

在你的适配器中写:

public static interface FirstShot
{
public void onFirstShot();
}


private FirstShot firstShot;
private boolean shot = false;

@Override
public Fragment getItem(int arg0)
{
if (!shot && firstShot != null)
{
shot = true;
firstShot.onFirstShot();
}

// your code here
}

现在在 Activity 中实现 FirstShot:

@Override
public void onFirstShot()
{
viewPager.post(new Runnable()
{
@Override
public void run()
{
boolean needNotify = false;
if (pager.getCurrentItem() == position) needNotify = true;
viewPager.setCurrentItem(position, false);
if (needNotify) onPageSelected(position);
}
});
}

onPageSelected() 现在调用!

关于android - 我可以在viewPager中使用setCurrentItem并使用onPageSelected吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070339/

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