1. 程式人生 > >popwin實現仿京東 商品列表 彈窗 條件篩選 列表彈窗

popwin實現仿京東 商品列表 彈窗 條件篩選 列表彈窗

有需求就有加班

寫一個仿照京東的條件篩選彈窗,按道理講 Drawerlayout, dialog  ,彈窗activity  ,popwin  都可以實現的,看自己擅長什麼,或者專案適合什麼 就用什麼寫就OK;

我是選擇用popwin寫的, 因為正好之前別的寫了彈窗選擇的對話方塊,正好部分程式碼可以用,,

效果圖:


上程式碼(popwin的 關鍵程式碼就這麼多,直接貼了   自我感覺  註釋還是挺詳細的):

private void initPop() {
/** 自定義 彈窗寬高 */
WindowManager manager = (WindowManager) context.getSystemService
(Context.WINDOW_SERVICE); final Display display = manager.getDefaultDisplay(); /** 獲取狀態列高度**/ int statusBarHeight1 = -1; //獲取status_bar_height資源的ID int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { //根據資源ID獲取響應的尺寸值 statusBarHeight1
= context.getResources().getDimensionPixelSize(resourceId); } View popView = LayoutInflater.from(context).inflate(R.layout.flow_pop_listview, null); //設定view this.setContentView(popView); //設定寬高(也可設定為LinearLayout.LayoutParams.MATCH_PARENT或者LinearLayout.LayoutParams.MATCH_PARENTthis.setWidth(display.getWidth()
/ 3 * 2);/*螢幕寬度的 2/3 */ this.setHeight(display.getHeight() - statusBarHeight1);/*螢幕高度 部分手機 因為狀態列的高度 會導致底部按鈕顯示不全,所以減去*/ //設定PopupWindow的焦點 this.setFocusable(true); //設定視窗以外的地方點選可關閉pop this.setOutsideTouchable(true); //設定背景透明 this.setBackgroundDrawable(new ColorDrawable(0x33000000));
 this.showAtLocation(popView, Gravity.RIGHT, 0, 0);
mListView = (DIYListView) popView.findViewById(R.id.listview);
tvReset = (TextView) popView.findViewById(R.id.tv_reset);
tvConfirm = (TextView) popView.findViewById(R.id.tv_confirm);
nullView = popView.findViewById(R.id.view_null);
adapter = new FlowPopListViewAdapter(context, dataList);
mListView.setAdapter(adapter);
tvReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int x = 0; x < dataList.size(); x++) {
List<DataBean.ChildItem> childrenBeen = dataList.get(x).getChildren();
                for (int y = 0; y < childrenBeen.size(); y++) {
if (childrenBeen.get(y).isSelected())
childrenBeen.get(y).setSelected(false);
}
            }
adapter.notifyDataSetChanged();
}
    });
tvConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//自定義監聽第三步   回傳監聽
onConfirmClickListener.onConfirmClick();
dismiss();
}
    });
nullView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
    });
}



}

 
另外的就是,佈局填充的了,因為內容 文字長度 不固定,所以考慮了流式佈局,自適應長度的,自定義了個flowlayout,

就不貼程式碼了。可以用別的控制元件代替,

下邊是 demo連結,需要的可以參考一下