Android—在展示popupWindow的同时监听系统返回键

需求:点击按钮弹出popupWindow加载店铺列表,而有的店铺里面又有商品,这时候就需要在点击popupWindow列表中的店铺的时候判断是否有子级,如果有子级的话就刷新popupWindow列表数据为商品列表,而这时popupwindow展示的是商品的列表,当此时点击系统返回键的时候,要求popupwindow展示回店铺列表而不是关闭popupWindow,只有在popupWindow展示的是店铺列表的时候点击系统返回键才能关闭popupWindow

代码实现

一:加载popupWindow布局

LineraLayout view = LayoutInflater.from(context).inflate(R.layout.pop_rsd_list, null);
        view.setFocusable(true); // 这个很重要    把焦点切换到到popupWind的外层VIew
        this.mContext = context;
        this.mRootView = root;
        ButterKnife.bind(this, view);
        statusLayoutManager = new NoContentStatus.Builder(mxreList).setEmptyLayout(R.layout.layout_tp_empty).build();
        mPopupWindow = new PopupWindow(context);
        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.setFocusable(false);//这一步也需要设置 关闭popupWindow的焦点
        mPopupWindow.setWidth(RelativeLayout.LayoutParams.WRAP_CONTENT);
        mPopupWindow.setHeight(RelativeLayout.LayoutParams.WRAP_CONTENT);
        mPopupWindow.setContentView(view);
//最重要的是注释这两行,其他的根据项目自行修改

二:定义一个pageNum值

private int pagenum=1;这里定义pageNum是用作标识popupWindow展示的是父级还是子级页面,默认设置1用来标识展示的是父级页面,展示的是子级的时候,pageNum=2;

三:对系统返回键进行监听(系统返回键有多种,都可行)

 //监听返回键
    @Override
    public void onBackPressed() {
//        super.onBackPressed();//这里注释掉是防止点击返回键的时候退回到了上一级
        if (rsdListView != null) {//这样就证明popupWindow列表是在显示着的  rsdListView 是popupWindow列表。。这里是对popupWindow展示进行封装到了rsdListView类中
            if (pageNum == 2) {//证明此时展示的是子级
                getRsdChildList();//如果是子级的话应该返回到父级
                pageNum = 1;//数据切换之后就是第一页了
            } else {
                rsdListView.show();//当popup展示的是第一页的时候就应该关闭popupWindow
            }
        } else {
        }

    }


或者第二种监听方法
//同样是返回键监听,两种方法都行得通
    /*@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {//如果返回键按下
            if (rsdListView != null) {//这样就证明Rsd列表是在显示着的
                if (pageNum == 2) {//证明此时展示的是子级
                    getRsdChildList();//如果是子级的话应该返回到父级
                    pageNum = 1;//数据切换之后就是第一页了
                } else {
                    rsdListView.show();//当popup展示的是第一页的时候就应该关闭popupWindow
                }
            } else {
            }
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }*/

四:popup展示方法的控制

 /**
     * 展示
     */
    public void show() {
        if (mPopupWindow != null) {
            if (mPopupWindow.isShowing()) {//判断是否在展示
                mPopupWindow.dismiss();//如果展示中就关闭
            } else {//否则就进行展示
                mPopupWindow.showAsDropDown(mRootView, 0, -U.dip2px(mContext, 10));
            }
        }
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值