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));
            }
        }
    }

 

你可能感兴趣的:(Android,系统返回键监听,popupWindow展示)