之前沒聽過有listpopwindow這個組件,後來百度搜索,居然還有ListPopupWindow組件,爲了項目需要,就實現了ListPopupWindow獲取數據效果的功能。
本文由 戰狼戶外 (戶外用品 淘寶店鋪) 贊助提供。 作者 戰狼戶外
第一步:獲取數據集合
// 獲取不同板塊
private voidgetBoardList(){
if(!NetworkUtil.isNetworkAvailable(getActivity())
&& !NetworkUtil.isMobileAvailable(getActivity())) {
showToast("您的網絡不可用!請檢查網絡!");
return;
}
RequestParams params =newRequestParams();
// 判斷是否登錄 0代表遊客
// params.put("cid", "1");
AsyncHttpUtil.post( BaseContent.BoardList,
null, newAsyncHttpResponseHandler() {
@Override
public voidonSuccess(intarg0,String arg1) {
super.onSuccess(arg0,arg1);
LogUtils.e("--獲取板塊列表集合json--",arg1);
try{
JSONObject object =newJSONObject(arg1);
if("1".equals(object.getString("status"))) {
// 獲取網絡數據集合boardBeanList 就是操作的數據,記得要初始化,
// List boardBeanList=new ArrayList();
boardBeanList= FastJsonUtils.getObjectsList(object.getString("data"),BoardBean.class);
Log.e("-- 獲取板塊大小 ---",boardBeanList.size()+"");
if(boardBeanList!=null&&boardBeanList.size() >0) {
}
}
}catch(JSONException e) {
e.printStackTrace();
}
}
@Override
public voidonFailure(Throwable throwable,String s) {
super.onFailure(throwable,s);
LogUtils.e("--獲取板塊列表集合失敗--","--獲取板塊列表集合失敗--");
}
@Override
public voidonFinish() {
super.onFinish();
LogUtils.e("--獲取板塊列表集合完成--","--獲取板塊列表集合完成--");
}
});
}
第二步: 自定義listpowindow
public classListPopWindowextendsPopupWindow{
privateContextcontext;//上下文
privateViewparentView;//父視圖
privateListdataList;//item數據源
privateOnPopItemClickListenerlistener;//item點擊接口
privateListViewlv;//item列表視圖
privateViewviewTop;//title視圖
privateStringtopText,bottomText;//title文字,bottom文字
privateTextViewtvTop,tvBottom;//title文本,bottom文本
privatePopWindowAdapteradapter;//適配器
privateOnBottomTextviewClickListenerbottomListener;//底部點擊接口
public interfaceOnPopItemClickListener{
voidonPopItemClick(View view, intposition);
}
public interfaceOnBottomTextviewClickListener{
voidonBottomClick();
}
publicListPopWindow(Context context,OnPopItemClickListener listener,OnBottomTextviewClickListener bottomListener,
View parentView,List dataList,String bottomText,String topText){
this.context= context;
this.listener= listener;
this.parentView= parentView;
this.dataList= dataList;
this.bottomListener= bottomListener;
this.topText= topText;
this.bottomText= bottomText;
initViews();
}
private voidinitViews(){
parentView= LayoutInflater.from(context).inflate(R.layout.list_popwindow,null);
setContentView(parentView);
lv= (ListView)parentView.findViewById(R.id.lv_popwindow);
//設置彈出窗體的高
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
//設置彈出窗體可點擊
this.setFocusable(true);
//實例化一個ColorDrawable顏色爲半透明
ColorDrawable dw =newColorDrawable(0xb0000000);
//設置SelectPicPopupWindow彈出窗體的背景
this.setBackgroundDrawable(dw);
//view添加OnTouchListener監聽判斷獲取觸屏位置如果在佈局外面則銷燬彈出框
parentView.setOnTouchListener(newView.OnTouchListener() {
public booleanonTouch(View v,MotionEvent event) {
intheight =parentView.findViewById(R.id.ll_bottom).getTop();
inty = (int) event.getY();
if(event.getAction() == MotionEvent.ACTION_UP) {
if(y > height) {
dismiss();
}
}
return true;
}
});
update();
viewTop=parentView.findViewById(R.id.view_line1);
tvBottom= (TextView)parentView.findViewById(R.id.tv_popwindow_bottom);
tvTop= (TextView)parentView.findViewById(R.id.tv_popwindow_first);
adapter=newPopWindowAdapter(context,dataList,false);
lv.setAdapter(adapter);
if(!TextUtils.isEmpty(topText)){
tvTop.setVisibility(View.VISIBLE);
tvTop.setText(topText);
viewTop.setVisibility(View.VISIBLE);
}
else{
tvTop.setVisibility(View.GONE);
viewTop.setVisibility(View.GONE);
}
if(!TextUtils.isEmpty(bottomText)){
tvBottom.setVisibility(View.VISIBLE);
tvBottom.setText(bottomText);
}
else{
tvBottom.setVisibility(View.GONE);
}
lv.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@Override
public voidonItemClick(AdapterView adapterView,View view, inti, longl) {
listener.onPopItemClick(view,i);
}
});
tvBottom.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View view) {
bottomListener.onBottomClick();
}
});
}
}
第三步: 創建 PopWindowAdapter
public classPopWindowAdapterextendsBaseAdapter {
privateContextcontext;
privateListdataList;
privateLayoutInflaterinflater;
private booleanisShowImg=false;
privateImageLoaderimageLoader= ImageLoader.getInstance();
privateDisplayImageOptionsoptions;
publicPopWindowAdapter(Context context,List dataList, booleanisShowImg) {
this.context= context;
this.dataList= dataList;
this.inflater= LayoutInflater.from(context);
this.isShowImg= isShowImg;
options= Options.getListOptions();
}
@Override
public intgetCount() {
returndataList.size();
}
@Override
publicObjectgetItem(inti) {
returndataList.get(i);
}
@Override
public longgetItemId(inti) {
returni;
}
@Override
publicViewgetView(inti,View view,ViewGroup viewGroup) {
ViewHolder holder;
if(view ==null) {
view =inflater.inflate(R.layout.listview_popwindow_item, null);
holder =newViewHolder();
holder.tv_name= (TextView) view.findViewById(R.id.tv_title);
holder.v_line= (View) view.findViewById(R.id.v_line);
holder.iv_img= (ImageView) view.findViewById(R.id.iv_img);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
holder.tv_name.setText(dataList.get(i).getTitle());
Log.e("--獲取板塊條目路徑--",dataList.get(i).getImg());
imageLoader.displayImage(dataList.get(i).getImg(),holder.iv_img,options);
/* if (dataList.size() - 1 == i) {
holder.v_line.setVisibility(View.INVISIBLE);
holder.tv_name.setBackground(context.getResources().getDrawable(R.drawable.selector_bottom_half));
} else {
holder.v_line.setVisibility(View.VISIBLE);
holder.tv_name.setBackground(context.getResources().getDrawable(R.drawable.list_gray_item));
}*/
returnview;
}
private classViewHolder {
TextViewtv_name;
Viewv_line;
ImageViewiv_img;
}
}
第四步 創建佈局文件 listview_popwindow_item
listview裏面的條目佈局,這個比較簡單,自己寫,本人實現了 顯示 圖片,文字兩個組件
第五步 當前actiivty或者 fragment 實現接口文件,同時實現抽象方法(本人在framgent實現)
public classHomePageFragm entextends BaseFragment implements ListPopWindow.OnPopItemClickListener,ListPopWindow.OnBottomTextviewClickListener{
@Override
public booleanonOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public voidonBottomClick() {
popWindow.dismiss();
}
@Override
public voidonPopItemClick(View view, intposition) {
// 獲取網絡數據集合boardBeanList
String url =boardBeanList.get(position).getHttp_url();
BaseContent.mBaseUrl=url;
getAllData();
popWindow.dismiss();
}
}
第六步 點擊按鈕出現listpopwindow
show(iv_qiehuan);
// 注意 iv_qiehuan就是點擊按鈕對象,點擊後調用下面的方法,出現listpopwin對象。
public voidshow(View view){
popWindow=newListPopWindow(getActivity(),this,this,iv_qiehuan,boardBeanList,"取消","版塊選擇");
popWindow.showAtLocation(iv_qiehuan,Gravity.CENTER| Gravity.BOTTOM,0,0);
}
本文由戰狼戶外 (戶外用品 淘寶店鋪) 贊助提供。 更多瞭解,點擊戰狼戶外。
作者 戰狼戶外