android布局settag,android – FragmentStatePagerAdapter的instantiateItem()中setTag()和findViewWithTag()的实现...

参考以下

answer,我试图实现我目前在项目中所做的事情,即使用以下代码:@Override

public int getItemPosition(Object object) {

return POSITION_NONE;

}

因为当前的实现,我的ViewPager中的所有页面都被重新加载.我在第一时间实现这个原因的原因是重新加载一个片段(根据用户输入是动态的).

阅读完参考后,我对我应该做的事情有了一个模糊的想法,我覆盖了instantiateItem()方法,但在我尝试setTag()时,我对如何实现它感到困惑.我确实尝试了以下内容:@Override

public Object instantiateItem(ViewGroup viewgroup, int position) {

// TODO Auto-generated method stub

View viewA = viewgroup.getChildAt(0);

viewA.setTag("FragmentA");

View viewB = viewgroup.getChildAt(1);

viewB.setTag("FragmentB");

View viewC = viewgroup.getChildAt(2);

viewC.setTag("FragmentC");

return super.instantiateItem(viewgroup, position);

}

在我的界面实现中,我调用了以下内容:PlayingFragment fragment = new PlayingFragment();

fragment.setArguments(element);

getSupportFragmentManager().beginTransaction().add(fragment,"NowPlaying").commit();

adapter.notifyDataSetChanged();

pager.findViewWithTag("FragmentC");

当前的实现给了我一个NullPointerException

at:viewA.setTag(“FragmentA”);

有人可以帮我实现这个setTag()和findViewWithTag()实现吗?

最佳答案 当您调用viewA.setTag(“FragmentA”)时,视图组尚未初始化.这是此异常的直接原因.

要避免此问题,您需要在设置viewGroup后设置标记,即,您已经夸大了视图布局或创建了片段.

例如,FragmentStatePagerAdapter的instantiateItem的默认代码如下.@Override

public Object instantiateItem(ViewGroup container, int position) {

// If we already have this item instantiated, there is nothing

// to do. This can happen when we are restoring the entire pager

// from its saved state, where the fragment manager has already

// taken care of restoring the fragments we previously had instantiated.

if (mFragments.size() > position) {

Fragment f = mFragments.get(position);

if (f != null) {

return f;

}

}

if (mCurTransaction == null) {

mCurTransaction = mFragmentManager.beginTransaction();

}

Fragment fragment = getItem(position);

if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);

if (mSavedState.size() > position) {

Fragment.SavedState fss = mSavedState.get(position);

if (fss != null) {

fragment.setInitialSavedState(fss);

}

}

while (mFragments.size() <= position) {

mFragments.add(null);

}

fragment.setMenuVisibility(false);

fragment.setUserVisibleHint(false);

mFragments.set(position, fragment);

mCurTransaction.add(container.getId(), fragment);

return fragment;

}

您可以在创建片段/视图时在getItem方法中设置标记.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值