解决在dialog中使用 TabLayout+ViewPager 报ViewPager找不到id的问题



/**
 * 解决在dialog中使用 TabLayout+ViewPager 报ViewPager找不到id的问题
 * 使用:直接把这个类复制到项目里改改,然后直接调用即可
 */
public class BuyerLiveGoodsDialog extends DialogFragment {
    private TextView tvName;
    private TextView tvType;
    private SlidingTabLayout mSlidingTabLayout;
    private ViewPager mViewPager;

    private List<Fragment> mFragmentList = new ArrayList<>();
    private final String[] mTitles = {"人口", "单位", "场所"};

    private String num;
    private String houseUseLabel;
    private String houseId;                 // 房屋id
    private String buildingId;              // 楼宇id

    public BuyerLiveGoodsDialog(String num, String houseUseLabel, String houseId, String buildingId) {
        this.num = num;
        this.houseUseLabel = houseUseLabel;
        this.houseId = houseId;
        this.buildingId = buildingId;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.house_list_item_dialog, container, false);
        tvName = (TextView) view.findViewById(R.id.tvName);
        tvType = (TextView) view.findViewById(R.id.tvType);
        mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.mSlidingTabLayout);
        mViewPager = (ViewPager) view.findViewById(R.id.mViewPager);

        tvName.setText(num);
        tvType.setText(houseUseLabel);

        // 添加fragment
        mFragmentList.add(PeopleListFragment.open(houseId,"","",""));     // 人口
        mFragmentList.add(UnitListFragment.open(houseId, buildingId));     // 单位
        mFragmentList.add(PlaceListFragment.open(houseId, buildingId));     // 场所

        // ViewPager
        mViewPager.setAdapter(new HouseListViewPagerAdapter(getChildFragmentManager(), mFragmentList));
        mViewPager.setOffscreenPageLimit(mFragmentList.size());
        mViewPager.setCurrentItem(0);

        // SlidingTabLayout
        mSlidingTabLayout.setViewPager(mViewPager, mTitles);
        mSlidingTabLayout.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {
                mViewPager.setCurrentItem(position);
            }

            @Override
            public void onTabReselect(int position) {
            }
        });

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();
        if (window != null) {
            // 一定要设置Background,如果不设置,window属性设置无效
            window.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.text_color)));
            DisplayMetrics dm = new DisplayMetrics();
            if (getActivity() != null) {
                WindowManager windowManager = getActivity().getWindowManager();
                if (windowManager != null) {
                    windowManager.getDefaultDisplay().getMetrics(dm);
                    WindowManager.LayoutParams params = window.getAttributes();
                    params.gravity = Gravity.BOTTOM;
                    // 使用ViewGroup.LayoutParams,以便Dialog 宽度充满整个屏幕
                    //设置窗口宽度为充满全屏
                    params.width = WindowManager.LayoutParams.MATCH_PARENT;
                    //设置窗口高度为包裹内容
                    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
                    window.setAttributes(params);
                }
            }
        }
    }

    public static void showDialog(FragmentManager fragmentManager, String num, String houseUseLabel,String houseId, String buildingId) {
        BuyerLiveGoodsDialog dialog = new BuyerLiveGoodsDialog(num, houseUseLabel, houseId, buildingId);
        dialog.show(fragmentManager, "tag");
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值