Android实现可复用的筛选页面
作者:free5156 发布时间:2023-02-23 09:41:27
标签:Android,筛选页面
本文实例为大家分享了Android实现可复用的筛选页面的具体代码,供大家参考,具体内容如下
窗口代码
/**
* 筛选页面
* 1.将用户的输入转换成sql语句
* 2.涉及到精确查询和模糊查询
* 3.提交数据之后需要刷新列表
*/
public class UserFilterActivity extends AppCompatActivity implements View.OnClickListener {
private List<ImageView> imageViewList;
private Context mContext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_filter);
ButterKnife.bind(this);
initView();
initData();
initListener();
}
private void initData() {
mContext = this;
title.setText("筛选");
//将所有的ImageView实例存进list
imageViewList = new ArrayList<>();
imageViewList.add(ivNumber);
imageViewList.add(ivMobile);
imageViewList.add(ivWorkNumber);
imageViewList.add(ivSysName);
imageViewList.add(ivPost);
imageViewList.add(ivTelephone);
imageViewList.add(ivEmail);
//初始化ImageView,把状态放进tag里面
// 所有的ImageView都是未选中状态
for (ImageView imageView : imageViewList) {
imageView.setTag(false);
}
}
private void initView() {
editTv.setVisibility(View.VISIBLE);
editTv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_send_black_24dp, 0, 0, 0);
}
private void initListener() {
//给ImageView设置监听
for (ImageView imageView : imageViewList) {
imageView.setOnClickListener(this);
}
//单选按钮设置监听
rgStatus.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.rb_status_off) {
offTime.setVisibility(View.VISIBLE);
line.setVisibility(View.VISIBLE);
} else {
offTime.setVisibility(View.GONE);
line.setVisibility(View.GONE);
}
});
titleLeft.setOnClickListener(this);
editTv.setOnClickListener(this);
tvUserName.setOnClickListener(this);
tvCreator.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.title_left) {
finish();
}
if (view.getId() == R.id.edit_tv) {
submit();
}
//选择用户,这里是多选
if (view.getId() == R.id.tv_user_name) {
Intent intent = new Intent(mContext, UserSelectActivity.class);
intent.putExtra("isMultipleEnable", true);
startActivityForResult(intent, 15476);
}
//选择用户,这里是单选
if (view.getId() == R.id.tv_creator) {
Intent intent = new Intent(mContext, UserSelectActivity.class);
startActivityForResult(intent, 13685);
}
//点击checkbox的动作
switch (view.getId()) {
case R.id.iv_number:
case R.id.iv_work_number:
case R.id.iv_sys_name:
case R.id.iv_post:
case R.id.iv_mobile:
case R.id.iv_telephone:
case R.id.iv_email:
switchExact((ImageView) view);
}
}
//拼接sql语句,并回传给上一个页面然后结束此页
//字段仅供参考
public void submit() {
StringBuilder sb = new StringBuilder("where");
String number = etNumber.getText().toString();
String workNumber = etWorkNumber.getText().toString();
String sysName = etSysName.getText().toString();
String post = etPost.getText().toString();
String mobile = etMobile.getText().toString();
String telePhone = etTelePhone.getText().toString();
String email = etEmail.getText().toString();
if (!TextUtils.isEmpty(number)) {
String[] arr = number.split(",");
if ((boolean) ivNumber.getTag()) {
sb.append(" and userID in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (left(userId, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
} else {
sb.append(" or left(userId, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(sysName)) {
String[] arr = sysName.split(",");
if ((boolean) ivSysName.getTag()) {
sb.append(" and userName in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (userName like '|").append(arr[i]).append("|'");
} else {
sb.append(" or userName like '|").append(arr[i]).append("|'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(workNumber)) {
String[] arr = workNumber.split(",");
if ((boolean) ivWorkNumber.getTag()) {
sb.append(" and workNumber in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (workNumber like '").append(arr[0]).append("|'");
} else {
sb.append(" or workNumber like '").append(arr[i]).append("|'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(post)) {
String[] arr = post.split(",");
if ((boolean) ivPost.getTag()) {
sb.append(" and workPos in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (workPost like '|").append(arr[0]).append("|'");
} else {
sb.append(" or workPost like '|").append(arr[i]).append("|'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(mobile)) {
String[] arr = mobile.split(",");
if ((boolean) ivMobile.getTag()) {
sb.append(" and mobile in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
sb.append(" and mobileNumber in ('").append(stringToString(arr)).append("')");
if (i == 0) {
sb.append(" and (left(mobileNumber, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
} else {
sb.append(" or left(mobileNumber, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(telePhone)) {
String[] arr = telePhone.split(",");
if ((boolean) ivTelephone.getTag()) {
sb.append(" and officeNumber in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (left(officeNumber, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
} else {
sb.append(" or left(officeNumber, ").append(arr[i].length()).append(") = '").append(arr[i]).append("'");
}
}
sb.append(")");
}
}
if (!TextUtils.isEmpty(email)) {
String[] arr = email.split(",");
if ((boolean) ivEmail.getTag()) {
sb.append(" and email in (").append(stringToString(arr)).append(")");
} else {
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
sb.append(" and (emailLIKE '|").append(arr[i]).append("|'");
} else {
sb.append(" oremail LIKE '|").append(arr[i]).append("|'");
}
}
sb.append(")");
}
}
Intent intent = new Intent();
String sql = sb.toString().replaceFirst(" and", "");
intent.putExtra("sql", sql);
setResult(123, intent);
finish();
}
//切换checkbox状态
public void switchExact(ImageView view) {
view.setTag(!(boolean) view.getTag());
if ((boolean) view.getTag()) {
view.setImageResource(R.drawable.ic_check_box_black_24dp);
} else {
view.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp);
}
}
private String stringToString(String[] array) {
StringBuilder end = new StringBuilder("");
for (String s : array) {
end.append("'").append(s).append("',");
}
return end.toString().substring(0, end.length() - 1);
}
@Override
//回传值的处理
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 15476 && resultCode == RESULT_OK) {
ArrayList<ClsNormalUser> users = data.getParcelableArrayListExtra("users");
StringBuilder sb = new StringBuilder();
for (ClsNormalUser user : users) {
sb.append(user.getCName()).append(",");
}
tvUserName.setText(sb.toString());
}
if (requestCode == 13685 && resultCode == RESULT_OK) {
ClsNormalUser user = data.getParcelableExtra("user");
tvCreator.setText(user.getCName());
}
super.onActivityResult(requestCode, resultCode, data);
}
}
效果如图
来源:https://blog.csdn.net/csdncaoguo940713/article/details/90241945


猜你喜欢
- 一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现
- Java中对象创建,内存分配,垃圾回收的权力交给了虚拟机,这其中有利也有弊,程序员也减轻了负担,但是如果不熟悉Java的内存区域划分,一旦出
- 下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场……先看看效果图:实现private void startAnim() {
- 一、题目描述题目:模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。实现:使用特殊域变量volatile实现同步。二、解题思路创建
- 本文为大家分享了Android Studio下载和配置教程,供大家参考,具体内容如下1.下载Android Studio官网下载
- 在Android开发中,我们经常遇到Android读取图片大小超过屏幕显示的图(一般只要显示一定规格的预览图即可),在图片特别多或者图片显示
- 1.Java Io流的概念,分类,类图。1.1 Java Io流的概念java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操
- 1.JSON数据交互1.1 JSON概述JSON 是一种轻量级的数据交换格式,是一种理想的数据交互语言,它易于阅读和编写,同时也易于机器解析
- 修改\packages\apps\Camera\res\values\arrays.xml中的以下代码: <string-array
- 项目介绍springboot搭建的访客管理系统,针对高端基地做严格把控来访人员信息管理,用户后端可以设置多个管理员帐号,给予不同部门的管理层
- 前言Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上
- PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word、Excel、PDF、PowerPoint和图片等集合到一个PDF文
- 本文汇集36个Android开发常用经典代码片段,包括拨打电话、发送短信、唤醒屏幕并解锁、是否有网络连接、动态显示或者是隐藏软键盘等,希望对
- 在Android中,用string-array是一种简单的提取XML资源文件数据的方法。例子如下:把相应的数据放到values文件夹的arr
- SSO :同一个帐号在同一个公司不同系统上登陆 使用SpringSecurity实现类似于SSO登陆系统是十分简单的 下面我就搭
- 在这里,记录我在项目中使用log4net记录本地日志的步骤。在不会之前感觉很难,很神秘,一旦会了之后其实没那么难。其实所有的事情都是一样的,
- C# 利用代理爬虫网页实现代码:// yanggang@mimvp.com// http://proxy.mimvp.com// 2015-
- 引言最近,因为开发的时候经改动依赖的库,所以,我想对 Gradle 脚本做一个调整,用来动态地将依赖替换为源码。这里以 android-mv
- RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样。RP
- 本文实例讲述了WCF实现的计算器功能。分享给大家供大家参考,具体如下:对于WCF,我们有了前面的理论基础,今天通过一个计算器的实例主要给大家