ListPopupWindow的使用:popupwindow加載listview

之前沒聽過有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);

}

本文由戰狼戶外 (戶外用品 淘寶店鋪) 贊助提供。 更多瞭解,點擊戰狼戶外。

作者 戰狼戶外