Android弹窗ListPopupWindow的简单应用详解

2022-07-20,,,

概述

常用的弹窗有菜单,或者dialog,但更加人性化和可自定义的还是popupwindow
如果只是展示列表数据或者弹窗列表选择,直接使用listpopupwindow即可,不用再单独去设置布局。
如果想要更加多样化的那就自定义一个布局,使用popupwindow即可,也不复杂。

用法

自定义listpopupwindow类

public class chargeitemsumpop extends listpopupwindow {

 public chargeitemsumpop(context context) {
  super(context);
 }
}

属性设置

因为里面已经有一个列表控件了,所以,不用再绑定布局

setheight(viewgroup.layoutparams.wrap_content);
setwidth(600);
setmodal(true);
setbackgrounddrawable(new colordrawable(0xcc000000));

绑定adapter

//添加想要展示的数据
calendar calendar = calendar.getinstance();
int year = calendar.get(calendar.year);
list<integer> lstyear = new arraylist<>();
for(int i = 2015; i <= year; i++){
    lstyear.add(i);
}
arrayadapter<integer> adapter = new arrayadapter<>(context, android.r.layout.simple_spinner_dropdown_item, lstyear);
setadapter(adapter);

activity监听

chargedateyearpop pop = new chargedateyearpop(this);
pop.setonitemclicklistener((adapterview, view, i, l) -> {
    bindingview.chargeyear.settext(string.valueof(adapterview.getadapter().getitem(i)));
    pop.dismiss();
});
pop.setanchorview(bindingview.chargeyear);
pop.show();

完整弹窗类

与普通的弹窗不一样的地方在于这里面是一个列表,所以要绑定adapter进行展示

public class chargedateyearpop extends listpopupwindow {

    public chargedateyearpop(context context) {
        super(context);
        setheight(800);
        setwidth(200);
        setmodal(true);
        setbackgrounddrawable(new colordrawable(0xcc000000));
        initview(context);
    }

    private void initview(context context) {
        calendar calendar = calendar.getinstance();
        int year = calendar.get(calendar.year);
        list<integer> lstyear = new arraylist<>();
        for(int i = 2015; i <= year; i++){
            lstyear.add(i);
        }
        collections.sort(lstyear);
        collections.reverse(lstyear);
        arrayadapter<integer> adapter = new arrayadapter<>(context, android.r.layout.simple_spinner_dropdown_item, lstyear);
        setadapter(adapter);
    }
}

activity

private void showchargedateyear(){
    chargedateyearpop pop = new chargedateyearpop(this);
    pop.setonitemclicklistener((adapterview, view, i, l) -> {
        bindingview.chargeyear.settext(string.valueof(adapterview.getadapter().getitem(i)));
        pop.dismiss();
        //重载数据等的操作
        //mpresenter.getcharges(getchargedate());
    });
    pop.setanchorview(bindingview.chargeyear);
    pop.show();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《Android弹窗ListPopupWindow的简单应用详解.doc》

下载本文的Word格式文档,以方便收藏与打印。