Android实现可复用的选择页面
作者:free5156 发布时间:2022-09-25 21:08:24
标签:Android,选择页面
本文实例为大家分享了Android实现可复用的选择页面的具体代码,供大家参考,具体内容如下
窗口代码
/**
* 根据上一个页面传过来的isMultipleEnable判断是否可以多选
* 1.单选页面选中一个条目直接结束并回传
* 2.多选页面选中之后需要提交
* 3.提交数据之后需要刷新列表
*/
public class UserSelectActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "UserSelectActivity";
@BindView(R.id.tv_title_middle)
TextView title;
@BindView(R.id.title_left)
ImageView back;
@BindView(R.id.normal_user_listview)
ListView mListView;
@BindView(R.id.edit_tv)
TextView edit;
@BindView(R.id.filter_tv)
TextView filter;
private Context mContext;
private boolean isMultipleEnable;
private UserSelectAdapter mAdapter;
private List<ClsNormalUser> mClsNormalUserList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal_user_list);
//初始化ButterKnife
ButterKnife.bind(this);
initView();
initData();
initListener();
}
private void initData() {
mContext = this;
//通过源页面传过来的值来生成对应的视图,默认是单选
isMultipleEnable = getIntent().getBooleanExtra("isMultipleEnable", false);
//初始化数据源
mClsNormalUserList = new ArrayList<>();
mAdapter = new UserSelectAdapter(mClsNormalUserList, mContext);
mListView.setAdapter(mAdapter);
getOfflineData(20);
//多选页面要显示提交按钮和checkbox
if (isMultipleEnable) {
edit.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_send_black_24dp, 0, 0, 0);
edit.setVisibility(View.VISIBLE);
for (ClsNormalUser user : mClsNormalUserList) {
user.setIsCheckBoxVisible(true);
}
}
}
//生成模拟数据
private void getOfflineData(int num) {
List<ClsNormalUser> clsNormalUserList = new ArrayList<>();
for (int i = 0; i < num; i++) {
ClsNormalUser clsNormalUser = new ClsNormalUser();
clsNormalUser.setUserID("userID " + i);
clsNormalUser.setWorkNumber("workNumber " + i);
clsNormalUser.setUserType("userType " + i);
clsNormalUser.setOrgName("orgName " + i);
clsNormalUser.setCName("cName " + i);
clsNormalUser.setSysUserName("sysUserName " + i);
clsNormalUser.setOrgID("orgID " + i);
clsNormalUser.setWorkPos("workPos " + i);
clsNormalUserList.add(clsNormalUser);
}
//数据填充后要同时适配器刷新视图
mClsNormalUserList.addAll(clsNormalUserList);
mAdapter.notifyDataSetChanged();
}
private void initView() {
title.setText("选择用户");
}
private void initListener() {
edit.setOnClickListener(this);
mListView.setOnItemClickListener((parent, view, position, id) -> {
ClsNormalUser clsNormalUser = mClsNormalUserList.get(position);
if (isMultipleEnable) {
//多选状态下点击选中当前条目
if (clsNormalUser.getIsCheckBoxVisible()) {
clsNormalUser.setIsChecked(!clsNormalUser.getIsChecked());
mAdapter.notifyDataSetChanged();
}
} else {
//单选状态下点击结束当前页并回传值
Intent intent = new Intent();
//实体类要实现序列化接口Parcelable
intent.putExtra("user", clsNormalUser);
setResult(RESULT_OK, intent);
finish();
}
});
}
@Override
public void onClick(View v) {
//点击提交按钮将选中的值回传并结束当前页
if (v.getId() == R.id.edit_tv) {
ArrayList<ClsNormalUser> normalUserList = new ArrayList<>();
for (ClsNormalUser normalUser : mClsNormalUserList) {
if (normalUser.getIsChecked()) {
normalUserList.add(normalUser);
}
}
Intent intent = new Intent();
//实体类要实现序列化接口Parcelable
intent.putParcelableArrayListExtra("users", normalUserList);
setResult(RESULT_OK, intent);
finish();
}
}
}
适配器代码
public class UserSelectAdapter extends BaseAdapter {
private List<ClsNormalUser> mList;
private LayoutInflater mInflater;
public UserSelectAdapter(List<ClsNormalUser> list, Context mContext) {
mList = list;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public ClsNormalUser getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup root) {
ItemHolder holder;
ClsNormalUser clsNormalUser = mList.get(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_alluser_sys, null);
holder = new ItemHolder();
holder.id = convertView.findViewById(R.id.user_id);
holder.name = convertView.findViewById(R.id.user_name);
holder.org = convertView.findViewById(R.id.user_org);
holder.checkBox = convertView.findViewById(R.id.user_checkbox);
convertView.setTag(holder);
} else {
holder = (ItemHolder) convertView.getTag();
}
holder.id.setText(clsNormalUser.getUserID());
holder.name.setText(clsNormalUser.getCName());
holder.org.setText(clsNormalUser.getOrgName());
//是否显示checkbox
if (clsNormalUser.getIsCheckBoxVisible()) {
holder.checkBox.setVisibility(View.VISIBLE);
} else {
holder.checkBox.setVisibility(View.GONE);
}
//条目是否选中
if (clsNormalUser.getIsChecked()) {
holder.checkBox.setImageResource(R.drawable.ic_check_box_black_24dp);
} else {
holder.checkBox.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp);
}
return convertView;
}
class ItemHolder {
TextView id;
TextView name;
TextView org;
ImageView checkBox;
}
}
效果如图
来源:https://blog.csdn.net/csdncaoguo940713/article/details/90241307
0
投稿
猜你喜欢
- 本文实例为大家分享了javaweb登录验证码的具体代码,供大家参考,具体内容如下使用:Controller:生成验证码@RequestMap
- 一、打印直角三角形这个循环控制打印十行空格for (int x = 1; x <= 10; x++) {//因为要打印一个十行的直角三
- 直接上代码:public class WeiXinFilter implements Filter{private static Logge
- 一 . 高效加载 BitmapBitMapFactory 提供了四类方法: decodeFile,decodeResource,decode
- 前言在项目的开发时,遇到实现服务器主动发送数据到前端页面的功能的需求。实现该功能不外乎使用轮询和websocket技术,但在考虑
- CardView介绍CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效
- 一.递归方法1.递归就是自己调用本身的方法,前提是有方法。2.递归使用找出递归的规律递归要有出口条件,也就是结束条件3.注意事项递归次数不能
- 最近研究C#相关的ORC技术,图像识别一般C和C++这种底层语言做的比较多,C#主要是依托一些封装好的组件进行调用,这里介绍三种身份证识别的
- 出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象)
- hystrixDashboard服务监控除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboar
- MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoD
- 前言: 有时候我们需要实现长按选择文字功能,比如阅读器一般都有这个功能,有时候某个自定义控件上可能就有这种需求,如何实现呢?正好最近还算闲,
- C++ 前置声明详解及实例【1】一般的前置函数声明见过最多的前置函数声明,基本格式代码如下:#include <iostream>
- 本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下首先,右键工具箱的组件,找到选择项,找到Wind
- 开始逐渐领略到ItemDecoration的美~今天让我 使用 ItemDecoration 来完成 可推动的悬浮导航栏的效果,最终实现的效
- Android jni调试打印char阵列的实例详解前言:在android开发中,用jni有时候需要打印某一个字符串的二进制格式输出,比较友
- Java 匿名内部类详解匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用
- 验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个
- 1、导入资源2、JSP代码<div class="page-container">  
- Spring Cloud Feign简介 Spring Cloud Feign也是一个基础工具类,它整合了Spring Cloud Ribb