需求:点击按钮弹出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));
}
}
}