goweii / AnyLayer

Android稳定高效的浮层创建管理框架
https://github.com/goweii/AnyLayer
Apache License 2.0
993 stars 114 forks source link

弹窗里面放ViewPager无法显示 #23

Closed xingguanghuanye closed 4 years ago

goweii commented 4 years ago

和viewpager在另一个项目(wanandroid)有使用,没有发现问题。 你这也没有代码没有日志,我也猜不出来呀!

xingguanghuanye commented 4 years ago

我的MainActivity里面的MainFragment里面是Scrollview嵌套RecyclerView,在MainActivity中使用了AnyLayer.dialog(),当dialog消失的时候,Scrollview自己滚动到RecyclerView控件置顶,这个问题有遇到过么

goweii commented 4 years ago

这个是焦点切换问题,你网上查下有解决办法的

xingguanghuanye commented 4 years ago

AnyLayer.dialog() .contentView(R.layout.app_dialog_select_img) .backgroundDimAmount(0.5f) .gravity(Gravity.BOTTOM) .contentAnimator(new DialogLayer.AnimatorCreator() { @Override public Animator createInAnimator(View content) { return AnimatorHelper.createBottomInAnim(content); }

                @Override
                public Animator createOutAnimator(View content) {
                    return AnimatorHelper.createBottomOutAnim(content);
                }
            })
            .onClick(new Layer.OnClickListener() {
                @Override
                public void onClick(Layer layer, View v) {
                    switch (v.getId()) {
                        case R.id.mTvTakePictures:
                            AnyLayer.toast().message("拍照").show();
                            break;
                        case R.id.mTvChooseFromAlbum:
                            AnyLayer.toast().message("从相册选").show();
                            break;
                    }
                }
            })
            .show();

我之前几个页面也是这么写的,都还正常,但今天一个新的页面里面也这么写,结果onCLick()这个方法好像没生效,断点调试的时候发现根本没有运行里面的onClick里面的代码

goweii commented 4 years ago

你没传id呀

xingguanghuanye commented 4 years ago

if (mLayer != null) { mLayer.show(); return; } mLayer = AnyLayer.dialog(mContext); mLayer.backgroundDimAmount(0.5f) ..... .bindData(new Layer.DataBinder() { @Override public void bindData(Layer layer) { RecyclerView mRv = layer.getView(R.id.mRv); mRv.setLayoutManager(new LinearLayoutManager(mContext)); ..... }).show() 提个建议,我虽然做了判断Layer是否为空,但每次调show()之后,bindData()方法内的代码还是会运行一次,这好像不太好,可以优化一下

goweii commented 4 years ago

可以,后面加下! 你可以先传已经绑定好数据的view进去,不要在bindData里绑定了。

goweii commented 4 years ago

if (mLayer != null) { mLayer.show(); return; } mLayer = AnyLayer.dialog(mContext); mLayer.backgroundDimAmount(0.5f) ..... .bindData(new Layer.DataBinder() { @override public void bindData(Layer layer) { RecyclerView mRv = layer.getView(R.id.mRv); mRv.setLayoutManager(new LinearLayoutManager(mContext)); ..... }).show() 提个建议,我虽然做了判断Layer是否为空,但每次调show()之后,bindData()方法内的代码还是会运行一次,这好像不太好,可以优化一下

3.4.3版本新增OnInitialize回调,仅在第一次加载时回调,可以在这里绑定数据