Android弹窗ListPopupWindow的简单应用详解
作者:曲幽 发布时间:2021-08-04 19:42:52
标签:Android,弹窗,ListPopupWindow
概述
常用的弹窗有菜单,或者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();
}
来源:https://blog.csdn.net/ymtianyu/article/details/121472328
0
投稿
猜你喜欢
- 本文实例讲述了java读取properties文件的方法。分享给大家供大家参考。具体实现方法如下:package com.test.demo
- 本文实例为大家分享了Unity虚拟摇杆的简单实现代码,供大家参考,具体内容如下简单的Unity虚拟摇杆实现,有详细注释。Game界面Insp
- C/C++的数据类型:一,整型Turbo C: [signed] int 2Byte//有符号数,-32768~32
- 今天使用jenkins构建时,报以下错误[ERROR] Failed to execute goal on project saas20:
- 解决 INSTALL FAILED CONFLICTING PROVIDER的问题方法 在安装Android应用时出现
- 刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。开门见山的说,实现屏幕自动/手动旋转的方式有两种
- 一、RESTful 简介REST 是一种软件架构风格。REST:Representational State Transfer,表现层资源状
- 那么什么是性能测试,它与功能测试有什么样的区别?性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测
- 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机
- Java 垃圾回收与对象生命周期详解Java中的垃圾回收与对象生命周期1. 垃圾回收 垃圾回收是Java程序设计中
- java多线程的同步方法实例代码先看一个段有关银行存钱的代码:class Bank { private int su
- 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据比如json数据如下:{responseHeader:{status:0
- 前言经常使用Swagger的小伙伴应该有所体会,Swagger对于JSON的支持真的很不友好!最近发现了两款颜值很不错的JSON可视化工具,
- 使用filter对response内容进行加密编写加密类(AES)/** * aes加密解密 */public class AesEncry
- 可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。
- 知道弱引用和软引用的概念与如何使用它们是两码事,引用类在垃圾回收工作的过程中有重要作用。我们都知道垃圾回收器会回收符合回收条件的对象的内存,
- 我在Eclipse/MyEclipse环境下都测试过了,都好使。需要2个组件,分别是: ext-4.0.2a.jsb2 spke
- spring Cache注解和redis区别1.不支持TTL即不能设置过期时间 expires time,SpringCache 认为这是各
- 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很
- 1. 你知道线程安全问题吗?线程安全问题:一般指在多线程模式下,多个线程对同一个共享数据进行操作时,第一个线程还没来得及更新共享数据,从而导