java.lang.IllegalArgumentException: No view found for id 0x7f05008b (com.example.viewpager:id/sub_viewpager) for fragment ScreenSlidePageFragment
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
switch (type) {
case TYPE_BANNER:
if (convertView == null) {
convertView = mBannerView.getBannerView(parent);
}
mBannerView.update(convertView);
break;
case TYPE_ITEM:
break;
}
return convertView;
}
public class BannerView {
private static final DisplayImageOptions IMAGE_OPTIONS_SCALE_STRETCHED =
new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.build();
private FragmentActivity mActivity;
private Fragment mFragment;
private List<Banner> mBanners;
private ScreenSlidePagerAdapter mPagerAdapter;
private ViewPager mViewPager;
public BannerView(FragmentActivity activity, Fragment fragment) {
mActivity = activity;
mFragment = fragment;
}
public void update(View convertView) {
mViewPager = (ViewPager) convertView;
if (mBanners != null && !mBanners.isEmpty()) {
if (mPagerAdapter == null) {
mPagerAdapter = new ScreenSlidePagerAdapter(mFragment.getChildFragmentManager());
mViewPager.setAdapter(mPagerAdapter);
}
}
mViewPager.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnBannerClickListener != null) {
mOnBannerClickListener.onBannerClick();
}
}
});
}
class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return new ScreenSlidePageFragment(mBanners.get(position).getImageUrl());
}
@Override
public int getCount() {
return mBanners == null ? 0 : mBanners.size();
}
}
class ScreenSlidePageFragment extends Fragment {
private String mUrl;
ScreenSlidePageFragment(String url) {
super();
mUrl = url;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_banner, container, false);
if (view != null) {
ImageView imageView = (ImageView) view.findViewById(R.id.item_banner_image);
imageView.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
ImageLoader.getInstance().displayImage(mUrl, imageView, IMAGE_OPTIONS_SCALE_STRETCHED);
}
return view;
}
}
}
以下是详细的错误列表:
11-10 18:12:19.217 1444-1444/? E/MessageQueue-JNI﹕ java.lang.IllegalArgumentException: No view found for id 0x7f05008b (com.example.viewpager:id/sub_viewpager) for fragment ScreenSlidePageFragment{428d8ea0 #0 id=0x7f05008b}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1280)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:672)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1761)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1896)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1854)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1912)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1912)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1912)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2228)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1471)
at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2176)
at android.view.View.dispatchPointerEvent(View.java:7571)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:132)
at android.os.Looper.loop(Looper.java:124)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang
更新:
我阅读了FragmentManager的源代码,并最终找到了真正的原因:当片段想要在viewpager附加到其父级之前附加到viewpager时,就会发生此异常。换句话说,在getView()方法返回之前,片段会膨胀。然后调用ViewPager容器的findViewById()方法,但ViewPager仍处于分离状态,因此将找到null,并引发IllegalArgumentException。
解决方案是创建一个自定义视页并延迟设置适配器:
public class BannerViewPager extends ViewPager {
PagerAdapter mPagerAdapter;
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mPagerAdapter != null) {
super.setAdapter(mPagerAdapter);
mPageIndicator.setViewPager(this);
}
}
@Override
public void setAdapter(PagerAdapter adapter) {
}
public void storeAdapter(PagerAdapter pagerAdapter) {
mPagerAdapter = pagerAdapter;
}
public BannerViewPager(Context context) {
super(context);
}
public BannerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
以下是代码:
父适配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getBannerView(mParent);
}
mViewPager = (ViewPager) convertView;
if (mBanners != null && !mBanners.isEmpty()) {
if (mPagerAdapter == null) {
FragmentManager childFM = mFragment.getChildFragmentManager();
removeOldFragment(childFM);
mPagerAdapter = new ScreenSlidePagerAdapter(childFM, mBanners);
mViewPager.setAdapter(mPagerAdapter);
}
}
return convertView;
}
关键方法:
private void removeOldFragment(FragmentManager fm) {
try {
Field added = fm.getClass().getDeclaredField("mAdded");
added.setAccessible(true);
added.set(fm, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
try {
Field active = fm.getClass().getDeclaredField("mActive");
active.setAccessible(true);
active.set(fm, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
问题内容: 我有一个活动,其中包含一个片段,在该片段中有一个按钮,当单击它时,会弹出一个对话框。 在此对话框中,有一个Viewpager,其中包含一些要显示的片段。 这是代码和错误,请您花宝贵的时间告诉我我哪里错了。非常感谢您的帮助。 MainActivity.class MyFragment.class PagerDialog.class 这是dialog.xml: 这是错误 问题答案: 我找到
我正试图按照本教程将thymeleaf添加到springboot应用程序中,但我似乎无法让它工作。辅导的:http://spr.com/part-2-adding-views-using-thymeleaf-and-jsp-if-you-want/ 当我在LoginController中使用@RestController启动应用程序时,我能够让springstart正常工作,但是当我将@RestC
问题内容: 我在Eclipse中打开了一个项目,但是发现我无法通过单击 Window- > Show View_切换到包浏览器。在“ _显示视图” 下 显示 的菜单中,我只是找不到项目“ Package Explorer”。可能是什么问题呢? 问题答案: 并非所有视图都直接在每个透视图中列出…选择:
Activity-->DialogFragment(有一个)>ViewPager-->调用适配器,该适配器反过来调用多个片段。以下是一些相关代码: 当我的视页为空时,我不会得到异常。所以基本上,当ViewPAger单独充气时,没有问题。然而,当我在ViewPager中返回一个实际片段时,我会得到异常。
我正在开发一个基本的自定义相机应用程序这些是我的依赖 camera_version=“1.0.0”
问题内容: 我刚刚开始使用Play2.0 Framework,并且试图在模板中使用主模板。我遇到的问题是,它在“共享”文件夹中时找不到“主”,如果我将其取出并放在“视图”根目录中,则它可以正常工作。 所以我想知道怎样才能引用从? 我的文件夹结构如下: 观看次数 家 index.scala.html 共享 main.scala.html 我的代码是: 我得到的错误是: 问题答案: 一旦进入子文件夹进