android–ViewPager在WindowManager添加的视图中获取“java.lang.IllegalArgumentException:找不到id的视图”

android–ViewPager在WindowManager添加的视图中获取“java.lang.IllegalArgumentException:找不到id的视图”,第1张

概述我正在实现一个照片查看器,允许用户从缩略图以全屏模式查看照片.我目前的方法是向WindowManager添加膨胀的视图.在充气视图中,有一个允许用户切换图像的ViewPager.我收到错误“java.lang.IllegalArgumentException:找不到id的视图”以下是详细信息(视图在setActivity方法中为openP

我正在实现一个照片查看器,允许用户从缩略图以全屏模式查看照片.
我目前的方法是向WindowManager添加膨胀的视图.在充气视图中,有一个允许用户切换图像的VIEwPager.我收到错误“java.lang.IllegalArgumentException:找不到ID的视图”

以下是详细信息(视图在setActivity方法中为openPhoto方法中的vIEwPager设置适配器):

public class PhotoVIEwer {private static final String TAG = "PhotoVIEwer";private Activity parentActivity;private FrameLayouttouchListener windowVIEw;private relativeLayout containerVIEw;private WindowManager.LayoutParams windowLayoutParams;private PhotoVIEwerAdapter photoAdapter;private VIEwPager vIEwPager;public PhotoVIEwer() {    super();}private static volatile PhotoVIEwer Instance = null;/*inflate vIEw here*/public voID setParentActivity(Activity activity) {    if (parentActivity == activity) {        return;    }    parentActivity = activity;    windowVIEw = new FrameLayout(activity);    containerVIEw = (relativeLayout) LayoutInflater.from(activity)            .inflate(R.layout.fragment_photo_vIEwer, null);    containerVIEw.setFocusable(false);    windowVIEw.addVIEw(containerVIEw);    windowLayoutParams = new WindowManager.LayoutParams();    windowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;    windowLayoutParams.format = PixelFormat.TRANSLUCENT;    windowLayoutParams.wIDth = WindowManager.LayoutParams.MATCH_PARENT;    windowLayoutParams.gravity = Gravity.top;    windowLayoutParams.type = WindowManager.LayoutParams.LAST_APPliCATION_WINDOW;    windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;    vIEwPager = (VIEwPager) containerVIEw.findVIEwByID(R.ID.photo_vIEwer_vIEw_pager);}/*set data and adapter for vIEwPager here*/public voID openPhoto (PhotoSupporter photoSupporter, int position){    try {        if (windowVIEw.getParent() != null) {            WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE);            wm.removeVIEw(windowVIEw);        }    } catch (Exception e) {        Log.v(TAG, e.getMessage());    }    WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE);    wm.addVIEw(windowVIEw, windowLayoutParams);    this.photoSupporter = photoSupporter;            photoAdapter = new PhotoVIEwerAdapter(((FragmentActivity) parentActivity).getSupportFragmentManager(), photoSupporter);    vIEwPager.storeAdapter(photoAdapter);    vIEwPager.setCurrentItem(position);}/** * Larger PhotoVIEw *  *  * **/public static class PhotoVIEwerAdapter extends FragmentStatePagerAdapter {    private PhotoSupporter photoSupporter;    public PhotoVIEwerAdapter(FragmentManager fm, PhotoSupporter photoSupporter) {        super(fm);        this.photoSupporter = photoSupporter;    }    @OverrIDe    public Fragment getItem(int position) {        String src = null;        // get photo src        return PhotoVIEwFragment.newInstance(src);    }    @OverrIDe    public int getCount() {        Log.w(TAG, "size in adapter: " + photoSupporter.getSize());        return photoSupporter.getSize();    }}public static class PhotoVIEwFragment extends Fragment {    private String imagePath;    public PhotoVIEwFragment() {    }    public static PhotoVIEwFragment newInstance(String imagePath) {        PhotoVIEwFragment prevIEwFragment = new PhotoVIEwFragment();        // put data        Bundle bundle = new Bundle();        bundle.putString("IMAGE_PATH",                imagePath);        prevIEwFragment.setArguments(bundle);        return prevIEwFragment;    }    /**     * When creating, retrIEve this instance's number from its arguments.     */    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        imagePath = getArguments() != null ? getArguments().getString(                "IMAGE_PATH") : "";        Log.d("onCreate", imagePath);    }    /**     * The Fragment's UI is just a simple text vIEw showing its instance     * number.     */    @OverrIDe    public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,            Bundle savedInstanceState) {        ImageVIEw imageVIEw = new ImageVIEw(getActivity());        linearLayout.LayoutParams lp = new linearLayout.LayoutParams                (linearLayout.LayoutParams.MATCH_PARENT, linearLayout.LayoutParams.MATCH_PARENT);        imageVIEw.setLayoutParams(lp);        // set image by Picasso        Picasso picassoInstance = Picasso.with(getActivity());        picassoInstance.setIndicatorsEnabled(true);        picassoInstance.load(new file(imagePath))                .error(R.drawable.ic_picture_placeholder_light2)                .fit()                .centerInsIDe()                .into(imageVIEw);        return imageVIEw;    }}}

这里是调用PhotoVIEwer方法的地方:

public class PhotosFragment  extends Fragment implements PhotoSupporter{/*....*/@OverrIDepublic voID onVIEwCreated(VIEw vIEw, Bundle savedInstanceState) {    super.onVIEwCreated(vIEw, savedInstanceState);    showLoading();    photosGrIDvIEw = (GrIDVIEw) findVIEwByID(R.ID.group_photos_grIDvIEw);    if (ListPhotos == null) {        ListPhotos = new ArrayList<Photo>();    }    photolistadapter = new Photolistadapter(ListPhotos, getActivity());    photosGrIDvIEw.setAdapter(photolistadapter);    photosGrIDvIEw.setonItemClickListener(new OnItemClickListener() {        @OverrIDe        public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw,                int position, long ID) {            PhotoVIEwer.getInstance().setParentActivity(getActivity());            PhotoVIEwer.getInstance().openPhoto(PhotosFragment.this, position);        }    });}@OverrIDepublic int getSize() {    return ListPhotos == null ? 0 : ListPhotos.size();}@OverrIDepublic Photo getPhotoItem(int position) {    return ListPhotos.get(position);}}

这里是vIEwPager视图的布局:

<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:layout_wIDth="match_parent"androID:layout_height="wrap_content"androID:orIEntation="vertical" ><androID.support.v4.vIEw.VIEwPager    androID:ID="@+ID/photo_vIEwer_vIEw_pager"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:background="@color/dark_background" ></androID.support.v4.vIEw.VIEwPager>

这是logcat:

01-14 14:12:55.271: E/AndroIDRuntime(11435): FATAL EXCEPTION: main01-14 14:12:55.271: E/AndroIDRuntime(11435): java.lang.IllegalArgumentException: No vIEw found for ID 0x7f0b00df (com.newsFeed.androID:ID/photo_vIEwer_vIEw_pager) for fragment PhotoVIEwFragment{537b5ec4 #8 ID=0x7f0b00df}01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:903)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.ja va:1088)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 01-14 14:12:55.271: E/AndroIDRuntime(11435):   at androID.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentSta tePagerAdapter.java:163)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:1064)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:911)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.support.v4.vIEw.VIEwPager.onMeasure(VIEwPager.java:1432)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEw.measure(VIEw.java:15172)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.Widget.relativeLayout.measureChildHorizontal(relativeLayout.java:617)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.Widget.relativeLayout.onMeasure(relativeLayout.java:399)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEw.measure(VIEw.java:15172)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4814)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at  androID.vIEw.VIEw.measure(VIEw.java:15172)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwRootImpl.performMeasure(VIEwRootImpl.java:1848)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwRootImpl.measureHIErarchy(VIEwRootImpl.java:1100)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1273)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwRootImpl.doTraversal(VIEwRootImpl.java:998)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.VIEwRootImpl$TraversalRunnable.run(VIEwRootImpl.java:4212)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.Choreographer$CallbackRecord.run(Choreographer.java:725)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.Choreographer.doCallbacks(Choreographer.java:555)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.Choreographer.doFrame(Choreographer.java:525)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.vIEw.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:711)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.os.Handler.handleCallback(Handler.java:615)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.os.Handler.dispatchMessage(Handler.java:92)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.os.Looper.loop(Looper.java:137)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at androID.app.ActivityThread.main(ActivityThread.java:4745)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at java.lang.reflect.Method.invokeNative(Native Method)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at java.lang.reflect.Method.invoke(Method.java:511)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)01-14 14:12:55.271: E/AndroIDRuntime(11435):    at dalvik.system.NativeStart.main(Native Method)

解决这个问题的任何方法?非常感谢你们!

解决方法:

我想这是因为你是通过WindowManager直接添加你的VIEwPager.这样做意味着它不会成为正常的Activity视图层次结构的一部分(即装饰视图的子级). Activity.findVIEwByID(使用装饰视图作为根遍历视图)将无法找到您的VIEwPager.

VIEwPager适配器创建Fragments并使用VIEwPager(ID)作为容器.在创建Fragment时,AndroID会通过Activity.findVIEwByID查找此容器,但无法找到它,因此抛出此异常.

听起来你想要一些出现在缩略图网格顶部的视图.您可以使用properly styled对话框(片段)来实现此目的.实施该观点的具体细节最好作为一个单独的问题提出.

总结

以上是内存溢出为你收集整理的android – ViewPager在WindowManager添加的视图中获取“java.lang.IllegalArgumentException:找不到id的视图”全部内容,希望文章能够帮你解决android – ViewPager在WindowManager添加的视图中获取“java.lang.IllegalArgumentException:找不到id的视图”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102488.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存