功能:点击全选按钮,选中所有任务,一并接收;点击单条任务,接收单条;不点击全选,点击多条任务,接收多条。
实现效果:
(1)全选

(2)多选

=====分割线======
主要代码:
GetTaskActivity.java
package com.andbase.patrol.gettask.activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import com.ab.activity.AbActivity;
import com.ab.db.storage.AbSqliteStorage;
import com.ab.http.AbHttpUtil;
import com.ab.http.AbRequestParams;
import com.ab.http.AbStringHttpResponseListener;
import com.ab.util.AbToastUtil;
import com.ab.view.titlebar.AbTitleBar;
import com.andbase.R;
import com.andbase.db.DBSDHelper;
import com.andbase.global.Constant;
import com.andbase.global.MyApplication;
import com.andbase.patrol.gettask.adapter.GettaskAdapter;
import com.andbase.patrol.search.dao.PatrolAreaDao;
import com.google.gson.Gson;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* author:lmx
* date:2018/4/9
* description:任务领取,可全选
*/
public class GetTaskActivity extends AbActivity implements GettaskAdapter.CheckedAllListener {
private MyApplication application;
private AbTitleBar mAbTitleBar = null;
private List<Map<String, Object>> list = null;
private GettaskAdapter gettaskAdapter;
//数据库操作
public AbSqliteStorage mAbSqliteStorage = null;
private AbHttpUtil mAbHttpUtil = null;
//定义数据库操作实现类
private PatrolAreaDao patrolAreaDao = null;
private String userName = "";
private String groupCode = "";
//多选
private boolean isCheck;
private CheckBox cbBtnAll;
SparseBooleanArray isCheckeds;
public String guid;
public String lineCode;
//用于存储已经选中的任务ID和lineCode
public static List<String> idLineCodes = new ArrayList<String>();
//判断是否全选按钮按下
boolean flag = false;
//实例
private Button btnAccept;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setAbContentView(R.layout.gettask);
application = (MyApplication) getApplication();
//任务领取页头
mAbTitleBar = this.getTitleBar();
mAbTitleBar.setTitleText(R.string.get_task);
mAbTitleBar.setLogo(R.drawable.button_selector_back);
mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
mAbTitleBar.setTitleTextMargin(10, 0, 0, 0);
mAbTitleBar.setLogoLine(R.drawable.line);
this.setTitleBarOverlay(true);
//初始化AbSqliteStorage
mAbSqliteStorage = AbSqliteStorage.getInstance(this);
//获取Http工具类
mAbHttpUtil = AbHttpUtil.getInstance(this);
//获取数据
userName = application.getUserName();
groupCode = application.getGroupCode();
//全选
cbBtnAll = (CheckBox) findViewById(R.id.cbBtnAll);
btnAccept = (Button) findViewById(R.id.btnAccept);
btnAccept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取所有选中的记录的ID,lineCode
if (idLineCodes.size() > 0) {
String taskIds = "";
for (String taskId : idLineCodes) {
taskIds += taskId + ",";
}
taskIds = taskIds.substring(0, taskIds.length() - 1);
//接受任务
receivePatrolTask(taskIds, null);
} else {
}
}
});
//加载任务列表
loadTasks();
}
/**
* 该点击事件放在了xml文件的android:onclick中
* @param v
*/
public void allSelect(View v) {
if (cbBtnAll.isChecked()) {
flag = true;
} else {
flag = false;
}
if (flag) {
for (int i = 0; i < list.size(); i++) {
isCheckeds.put(i, true);
GettaskAdapter.setIsSelected(isCheckeds);
}
} else {
for (int i = 0; i < list.size(); i++) {
isCheckeds.put(i, false);
GettaskAdapter.setIsSelected(isCheckeds);
}
}
//更新适配器
gettaskAdapter.notifyDataSetChanged();
}
/**
* 全选按钮的回调事件,是否进行全选
* @param checkall
*/
@Override
public void CheckAll(SparseBooleanArray checkall) {
//判断SparseBooleanArray是否含有true
if (checkall.indexOfValue(true) < 0) {
if (cbBtnAll.isChecked()) {
this.flag = false;
cbBtnAll.setChecked(false);
}
} else if (checkall.indexOfValue(false) < 0) {
if (!cbBtnAll.isChecked()) {
this.flag = false;
cbBtnAll.setChecked(true);
}
} else if (checkall.indexOfValue(false) >= 0 && checkall.indexOfValue(true) >= 0) {
if (cbBtnAll.isChecked()) {
this.flag = true;
cbBtnAll.setChecked(false);
}
}
}
/**
* 加载任务列表
*/
public void loadTasks() {
String url = Constant.BASEURL + "app_patrol_task!queryPatrolTasks.action";
AbRequestParams params = new AbRequestParams();
params.put("userName", userName);
params.put("groupCode", groupCode);
mAbHttpUtil.post(url, params, new AbStringHttpResponseListener() {
@Override
public void onSuccess(int statusCode, String content) {
//将结果传递回去
isCheckeds = new SparseBooleanArray();
list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
try {
JSONObject jsonObject = new JSONObject(content);
if ("true".equals(jsonObject.get("flag"))) {
String patrolTime = "";
//用JSON字符串来初始化一个JSON对象
JSONArray jsonArray = new JSONArray(jsonObject.get("data").toString());
for (int i = 0; i < jsonArray.length(); i++) {
patrolTime = jsonArray.getJSONObject(i).getString("startTime") + "-" + jsonArray.getJSONObject(i).getString("endTime");
map = new HashMap<String, Object>();
map.put("guid", jsonArray.getJSONObject(i).getString("id"));
map.put("lineCode", jsonArray.getJSONObject(i).getString("lineCode"));
map.put("itemNo", i + 1);
map.put("lineName", jsonArray.getJSONObject(i).getString("lineName"));
map.put("patrolTime", patrolTime);
map.put("itemHandle", "接受");
list.add(map);
}
}
} catch (Exception ex) {
Log.e("JSON Error: ", ex.toString());
}
ListView listView = (ListView) findViewById(R.id.lvGetTask);
gettaskAdapter = new GettaskAdapter(GetTaskActivity.this, list,
R.layout.gettask_item, new String[]{"guid", "lineCode", "itemNo", "lineName", "patrolTime", "itemHandle"}, new int[]{R.id.tvGuid, R.id.tvCode, R.id.tvTaskNo,
R.id.tvTaskLine, R.id.tvTaskTime, R.id.btnHandle, R.id.cbAgree});
listView.setAdapter(gettaskAdapter);
}
@Override
public void onStart() {
}
@Override
public void onFinish() {
}
@Override
public void onFailure(int statusCode, String content, Throwable error) {
//将失败错误信息传递回去
AbToastUtil.showToast(GetTaskActivity.this, content);
}
});
}
/**
* 接收任务
* @param taskIds
* @param lineCode
*/
public void receivePatrolTask(String taskIds, String lineCode) {
//初始化数据库操作实现类
patrolAreaDao = new PatrolAreaDao(GetTaskActivity.this);
//(1)获取数据库
//patrolAreaDao.startReadableDatabase();
//(2)执行查询
//List<PatrolArea> areaList = patrolAreaDao.queryList(null, "major_code='" + application.getMajorCode() + "' and (nfc_id is null or nfc_id='') and area_code in (select distinct area_code from m_line_point where line_code='" + lineCode + "')", null, null, null, "area_code asc ", null);
//(3)关闭数据库
//patrolAreaDao.closeDatabase();
// if (areaList.size() > 0) {
// AbToastUtil.showToast(GetTaskActivity.this, "请在巡检卡设置中绑定NFC卡");
// return;
// }
if (taskIds == null || "".equals(taskIds)) {
AbToastUtil.showToast(GetTaskActivity.this, "请选择接受的任务");
return;
}
String url = Constant.BASEURL + "app_patrol_task!receivePatrolTask.action";
AbRequestParams params = new AbRequestParams();
params.put("userName", application.getUserName());
params.put("groupCode", application.getGroupCode());
params.put("macceptTime", nowTime());
params.put("taskIds", taskIds);
mAbHttpUtil.post(url, params, new AbStringHttpResponseListener() {
@Override
public void onSuccess(int statusCode, String content) {
//将结果传递回去
//list = new ArrayList<Map<String, Object>>();
Gson gs = new Gson();
Map<String, String> map = gs.fromJson(content, Map.class);
DBSDHelper dbsdHelper = new DBSDHelper(GetTaskActivity.this);
SQLiteDatabase db = dbsdHelper.getWritableDatabase();
try {
if ("true".equals(map.get("flag"))) {
JSONArray jsonArray = new JSONArray(map.get("data"));
db.beginTransaction();
for (int i = 0; i < jsonArray.length(); i++) {
String sql = jsonArray.getJSONObject(i).getString("sql");
db.execSQL(sql);
}
db.setTransactionSuccessful();
//AbToastUtil.showToast(GetTaskActivity.this,"任务接受成功!");
loadTasks();
AbToastUtil.showToast(GetTaskActivity.this, "任务接受成功!");
}
} catch (Exception ex) {
Log.e("JSON Error: ", ex.toString());
} finally {
try {
if (db.isOpen()) {
db.endTransaction();
db.close();
dbsdHelper.close();
//初始化记录选中任务的数组
idLineCodes = new ArrayList<String>();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//
// ListView listView = (ListView) findViewById(R.id.get_task_list);
// GettaskAdapter gettaskAdapter = new GettaskAdapter(GetTaskActivity.this, list,
// R.layout.gettask_item, new String[] { "itemNo", "itemLine", "itemTime", "itemHandle"}, new int[] { R.id.itemNo,
// R.id.itemLine, R.id.itemTime,R.id.itemHandle});
// listView.setAdapter(gettaskAdapter);
}
@Override
public void onStart() {
}
@Override
public void onFinish() {
}
@Override
public void onFailure(int statusCode, String content, Throwable error) {
//将失败错误信息传递回去
AbToastUtil.showToast(GetTaskActivity.this, content);
}
});
}
/**
* 获取当前时间 yyyy-MM-dd HH:mm:ss
*/
public String nowTime() {
Calendar calendar = Calendar.getInstance(); //获取当前时间,作为图标的名字
String year = calendar.get(Calendar.YEAR) + "";
int month = calendar.get(Calendar.MONTH) + 1;
int strDate = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
String seperator1 = "-";
String seperator2 = ":";
String monthStr = "";
String strDateStr = "";
String hourStr = "";
String minuteStr = "";
String secondStr = "";
if (month >= 1 && month <= 9) {
monthStr = "0" + month;
} else {
monthStr = month + "";
}
if (strDate >= 0 && strDate <= 9) {
strDateStr = "0" + strDate;
} else {
strDateStr = strDate + "";
}
if (hour >= 0 && hour <= 9) {
hourStr = "0" + hour;
} else {
hourStr = hour + "";
}
if (minute >= 0 && minute <= 9) {
minuteStr = "0" + minute;
} else {
minuteStr = minute + "";
}
if (second >= 0 && second <= 9) {
secondStr = "0" + second;
} else {
secondStr = second + "";
}
String currentdate = year + seperator1 + monthStr + seperator1 + strDateStr
+ " " + hourStr + seperator2 + minuteStr
+ seperator2 + secondStr;
return currentdate;
}
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
public String getGuid() {
return guid;
}
public void setGuid(String guid) {
this.guid = guid;
}
public String getLineCode() {
return lineCode;
}
public void setLineCode(String lineCode) {
this.lineCode = lineCode;
}
public List<String> getIdLineCodes() {
return idLineCodes;
}
public void setIdLineCodes(List<String> idLineCodes) {
this.idLineCodes = idLineCodes;
}
}
GettaskAdapter.java
package com.andbase.patrol.gettask.adapter;
import android.graphics.Color;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.andbase.patrol.gettask.activity.GetTaskActivity;
import java.util.List;
import java.util.Map;
public class GettaskAdapter extends BaseAdapter {
private GetTaskActivity mContext;
//单行的布局
private int mResource;
//列表展现的数据
private List<? extends Map<String, ?>> mData;
//Map中的key
private String[] mFrom;
//view的id
private int[] mTo;
//点击变色
private int selectedPosition = -1;// 选中的位置
//多选--用SparseBooleanArray来代替map
private static SparseBooleanArray isSelected;
//用户存储条目的选择状态
private Map<Integer, Boolean> dataSet1;
private boolean isCheck;
//全选回调接口
CheckedAllListener mListener;
public void setCheckedAllListener(CheckedAllListener listener) {
mListener = listener;
}
/**
* 构造方法
*
* @param context
* @param data 列表展现的数据
* @param resource 单行的布局
* @param from Map中的key
* @param to view的id
*/
public GettaskAdapter(GetTaskActivity context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
mContext = context;
mData = data;
mResource = resource;
mFrom = from;
mTo = to;
isSelected = new SparseBooleanArray();
}
public static SparseBooleanArray getIsSelected() {
return isSelected;
}
public static void setIsSelected(SparseBooleanArray isSelected) {
GettaskAdapter.isSelected = isSelected;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//点击变色
public void setSelectedPosition(int position) {
selectedPosition = position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final GettaskAdapter.ViewHolder holder;
//设置数据
Map<String, ?> dataSet = mData.get(position);
if (convertView == null) {
//使用自定义的list_items作为Layout
convertView = LayoutInflater.from(mContext).inflate(mResource, parent, false);
//使用减少findView的次数
holder = new GettaskAdapter.ViewHolder();
holder.guid = ((TextView) convertView.findViewById(mTo[0]));
holder.lineCode = ((TextView) convertView.findViewById(mTo[1]));
holder.itemNo = ((TextView) convertView.findViewById(mTo[2]));
holder.lineName = ((TextView) convertView.findViewById(mTo[3]));
holder.patrolTime = ((TextView) convertView.findViewById(mTo[4]));
holder.itemHandle = ((Button) convertView.findViewById(mTo[5]));
holder.cbAgree = ((CheckBox) convertView.findViewById(mTo[6]));
//设置标记
convertView.setTag(holder);
holder.cbAgree.setTag(dataSet);
} else {
holder = (GettaskAdapter.ViewHolder) convertView.getTag();
holder.cbAgree.setTag(dataSet);
}
if (dataSet == null) {
return null;
}
//获取该行数据
final Object guid = dataSet.get(mFrom[0]);
final Object lineCode = dataSet.get(mFrom[1]);
final Object itemNo = dataSet.get(mFrom[2]);
final Object lineName = dataSet.get(mFrom[3]);
final Object patrolTime = dataSet.get(mFrom[4]);
final Object itemHandle = dataSet.get(mFrom[5]);
holder.guid.setText(guid.toString());
holder.lineCode.setText(lineCode.toString());
holder.itemNo.setText(itemNo.toString());
holder.lineName.setText(lineName.toString());
holder.patrolTime.setText(patrolTime.toString());
holder.itemHandle.setText(itemHandle.toString());
//巡检任务接受
holder.itemHandle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.itemHandle.setSelected(true);
holder.itemHandle.setPressed(true);
holder.itemHandle.setTextColor(Color.parseColor("#f75555"));
mContext.receivePatrolTask(guid.toString(), lineCode.toString());
}
});
// 多选
if (dataSet != null) {
holder.cbAgree.setChecked(isSelected.get(position));
}
/**
* 增加checkbox的改变事件,每个item的点击事件
*/
final ViewHolder fholder = holder;
holder.cbAgree.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isPressed()) {
isSelected.put(position, isChecked);
Map<String, ?> row = (Map<String, ?>)fholder.cbAgree.getTag();
String id = row.get(mFrom[0]).toString();
if(isChecked){
mContext.idLineCodes.add(id);
}else{
mContext.idLineCodes.remove(id);
}
}
mContext.setCheck(isChecked);
}
});
return convertView;
}
/**
* ViewHolder类
*/
static class ViewHolder {
TextView itemNo;//编号
TextView guid;//id
TextView lineCode;//巡检线路
TextView lineName;//巡检线路
TextView patrolTime;//巡检时间
Button itemHandle;//操作
CheckBox cbAgree;//多选按钮
}
/**
* 当所有CheckBox全选时回调
*/
public interface CheckedAllListener {
void CheckAll(SparseBooleanArray checkall);
}
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
}
gettask.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/gray_white">
<ListView
android:id="@+id/lvGetTask"
android:divider="@null"
android:dividerHeight="10.0dip"
android:scrollbars="none"
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
android:fadingEdge="none"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="55dip"
android:layout_marginBottom="41dip"/>
<!-- 按钮 -->
<FrameLayout
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:id="@+id/f1_frag"
android:layout_width="match_parent"
android:layout_height="40dip"
android:layout_marginBottom="0dip"
android:background="@color/white">
<CheckBox
android:id="@+id/cbBtnAll"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="15dip"
android:textColor="@color/project_word_color"
android:text="全选"
android:checked="false"
android:focusable="true"
android:onClick="allSelect"
android:textSize="@dimen/table_body" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:gravity="right"
android:layout_marginLeft="8dip">
<Button
android:id="@+id/btnAccept"
android:layout_width="100dip"
android:layout_height="fill_parent"
android:layout_marginLeft="1dip"
android:background="@color/btn_bg"
android:text="接收"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/table_body" />
</LinearLayout>
</FrameLayout>
</RelativeLayout>
gettask_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/rlLinkName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white">
<LinearLayout
android:id="@+id/llBox"
android:layout_width="fill_parent"
android:layout_height="@dimen/hidden_ll_h"
android:orientation="horizontal">
<!-- 第一列 多选按钮 -->
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.15"
android:orientation="vertical">
<!-- 多选按钮 -->
<CheckBox
android:id="@+id/cbAgree"
android:layout_width="@dimen/pages_small_box"
android:layout_height="@dimen/pages_small_box"
android:layout_marginTop="@dimen/slink_cb_top"
android:layout_marginLeft="10dip"
android:checked="false"
android:clickable="true"
android:focusable="true"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.3"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/hidden_ll_img_h"
android:orientation="horizontal">
<ImageView
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_gravity="center"
android:background="@drawable/circle" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/hidden_ll_item_h"
android:orientation="horizontal">
<!-- guid、线路编号 隐藏-->
<TextView
android:id="@+id/tvGuid"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="fill_vertical"
android:textColor="@color/title_text_color"
android:textSize="@dimen/table_body"
android:visibility="gone"/>
<TextView
android:id="@+id/tvCode"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="fill_vertical"
android:textColor="@color/title_text_color"
android:textSize="@dimen/table_body"
android:visibility="gone"/>
<!-- 任务编号 -->
<TextView
android:id="@+id/tvTaskNo"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="fill_vertical"
android:textColor="@color/title_text_color"
android:text="任务编号"
android:textSize="@dimen/table_body" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="left"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/hidden_ll_item_h2"
android:orientation="horizontal">
<!-- 巡检线路 -->
<TextView
android:id="@+id/tvTaskLine"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
android:textColor="@color/title_text_color"
android:text="巡检线路"
android:textSize="@dimen/title"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/hidden_ll_item_h3"
android:orientation="horizontal">
<!-- 时间 -->
<TextView
android:id="@+id/tvTaskTime"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
android:textColor="@color/details_fix_text_color"
android:text="09:00~11:00"
android:textSize="@dimen/table_body" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dip"
android:layout_height="80dip"
android:layout_weight="0.3"
android:gravity="right"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/pages_img_box"
android:layout_height="@dimen/pages_img_box"
android:gravity="fill_vertical"
android:background="@drawable/notstarted" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<Button
android:id="@+id/btnHandle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="@dimen/hidden_ll_img_top"
android:text="接收"
android:textColor="@color/blue"
android:textSize="@dimen/tb_body"
android:background="@color/transparent"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
网友评论
可以分享给我。
这是我的邮箱:1397547864@qq.com