package com.basic.security.fragment; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RelativeLayout; import android.widget.Spinner; import android.widget.TextView; import com.basic.security.R; import com.basic.security.base.BaseApplication; import com.basic.security.base.BaseFragment; import com.basic.security.fragment.organizationHelper.TreeAdapter; import com.basic.security.fragment.organizationHelper.TreePoint; import com.basic.security.fragment.organizationHelper.TreeUtils; import com.basic.security.manager.IdentityManager; import com.basic.security.manager.PersonIdentityManager; import com.basic.security.manager.PersonManager; import com.basic.security.manager.impl.cblite.TemporaryPersonManager; import com.basic.security.manager.impl.cblite.VisitManager; import com.basic.security.manager.impl.cblite.VisitorModelManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.BasicIdUtil; import com.basic.security.utils.DateUtil; import com.basic.security.utils.ToastUtil; import com.basic.security.utils.abslistview.CommonAdapter; import com.basic.security.utils.abslistview.ViewHolder; import com.basic.security.utils.yuv.pull.client.ServerUIMain; import com.basic.security.utils.yuv.pull.client.ServerUIMain2; import com.basic.security.utils.yuv.pull.client.ServerUIMain3; import com.basic.security.utils.yuv.pull.client.SocketClient; import com.basic.security.utils.yuv.pull.client.SocketClient2; import com.basic.security.utils.yuv.pull.client.SocketClient3; import com.basic.security.widget.hlistview.HListView; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @EFragment(R.layout.fragment_visitor_model) public class VisitorModelFragment extends BaseFragment { @ViewById public LinearLayout ll_image_one_check_identity, ll_temp_person_check_identity, ll_image_only_one_check_identity; @ViewById public Button save_person_visitor_model, delete_person, btn_temp_person_sure; @ViewById public GridView gv_visited_person, gv_temp_person; @ViewById public RelativeLayout rl_show_organization_click, rl_show_organization; @ViewById public ListView lv_organization; public Map checkedIdentityMapByPerson = new HashMap<>(); @ViewById ImageView iv_image_one, iv_image_two, iv_space, iv_image_one_left, iv_image_one_right, iv_image_two_left, iv_image_two_right, iv_register_image, iv_contact_person, iv_image_only_one; @ViewById TextView tv_image_one_name_top, tv_image_two_name_top, tv_image_one_name, tv_checked_identity, tv_image_two_name, tv_register_time, tv_visit_time, tv_visited_person_name, tv_visited_person_identity, tv_visited_person_department, tv_visited_person_phone, tv_image_only_one_name_top, tv_text_checked, tv_checked_identity_only_one; @ViewById HListView hlv_image_one, hlv_image_two, hlv_identity; @ViewById RadioButton rb_all_device, rb_this_device; @ViewById EditText et_input_name, et_input_id_card, et_input_phone, et_visited_person, et_visited_reason, et_remark, et_register_model; @ViewById Spinner spinner_register_rule; @ViewById FrameLayout fl_image_part_one, fl_image_part_two, fl_image_only_one; List allIdentityList = new ArrayList<>(); String[] arr = {"允许通行", "有效时间内通行", "确认通行", "拒绝通行"}; private CommonAdapter identityAdapter; private PartOneFaceAdapter partOneFaceAdapter; private PartTwoFaceAdapter partTwoFaceAdapter; private ModelAdapter checkedPerson = null; private List partOnePersonList = new ArrayList<>(); private List partTwoPersonList = new ArrayList<>(); private String leftCameraIp, rightCameraIp; private Map checkedIdentityMap = new HashMap<>(); private TreeAdapter adapter; private List pointList = new ArrayList<>(); private HashMap pointMap = new HashMap<>(); //====================== private Handler handler = new Handler(); private Runnable myRunnable = new Runnable() { @Override public void run() { refreshPerson(); handler.postDelayed(this, 10000); } }; //====================== private int flag = -1; private int oneCamera = 1; private int twoCamera = 2; private String register_rule = arr[0]; @Click void ll_image_one_check_identity() { // 点击选择人员身份{两个视频} checkedIdentityMap.clear(); ll_temp_person_check_identity.setVisibility(View.VISIBLE); gv_temp_person.setAdapter(new IdentityAdapter()); flag = twoCamera; } @Click void ll_image_only_one_check_identity() {// 一个视频 ll_image_one_check_identity(); flag = oneCamera; } @Click void btn_temp_person_sure() { ll_temp_person_check_identity.setVisibility(View.GONE); if (checkedIdentityMap.size() != 0) { StringBuffer sb = new StringBuffer(); for (ModelAdapter identity : checkedIdentityMap.values()) { sb.append(identity.getString("name") + ","); } if (flag == twoCamera) { tv_checked_identity.setText(sb.substring(0, sb.length() - 1)); } else if (flag == oneCamera) { tv_checked_identity_only_one.setText(sb.substring(0, sb.length() - 1)); } getPersonData(); } } public void getPersonData() { BaseApplication.getApplication().executorService.execute(() -> { if (flag == twoCamera) { partOnePersonList = VisitorModelManager.getIdentityPersonList(partOnePersonList, checkedIdentityMap); partTwoPersonList = VisitorModelManager.getIdentityPersonList(partTwoPersonList, checkedIdentityMap); refreshUiThread(); } else if (flag == oneCamera) { partTwoPersonList = VisitorModelManager.getIdentityPersonList(partTwoPersonList, checkedIdentityMap); refreshPartTwoAdapter(); } }); } @UiThread public void refreshPartTwoAdapter() { if (partTwoFaceAdapter != null) { partTwoFaceAdapter.notifyDataSetChanged(); } } @UiThread public void refreshUiThread() { if (partOneFaceAdapter != null) { partOneFaceAdapter.notifyDataSetChanged(); } if (partTwoFaceAdapter != null) { partTwoFaceAdapter.notifyDataSetChanged(); } } @Click void rl_show_organization_click() { rl_show_organization.setVisibility(View.VISIBLE); adapter = new TreeAdapter(mainActivity(), pointList, pointMap); lv_organization.setAdapter(adapter); initOrganizationData(); lv_organization.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // adapter.onItemClick(position); TreePoint treePoint = (TreePoint) adapter.getItem(position); if ("1".equals(treePoint.getISLEAF())) { rl_show_organization.setVisibility(View.GONE); ToastUtil.show(pointList.get(position).getNNAME()); } else { //如果点击的是父类 if (treePoint.isExpand()) { for (TreePoint tempPoint : pointList) { if (tempPoint.getPARENTID().equals(treePoint.getID())) { if ("0".equals(treePoint.getISLEAF())) { tempPoint.setExpand(false); } } } treePoint.setExpand(false); } else { treePoint.setExpand(true); } } adapter.notifyDataSetChanged(); } }); } private void initOrganizationData() { pointList.clear(); int id = 1000; int parentId = 0; int parentId2 = 0; int parentId3 = 0; for (int i = 1; i < 3; i++) { id++; pointList.add(new TreePoint("" + id, "学校" + i, "" + parentId, "0", i)); for (int j = 1; j < 7; j++) { if (j == 1) { parentId2 = id; } id++; pointList.add(new TreePoint("" + id, i + "年级" + "_" + j, "" + parentId2, "0", j)); for (int k = 1; k < 3; k++) { if (k == 1) { parentId3 = id; } id++; pointList.add(new TreePoint("" + id, "班级" + i + "_" + j + "_" + k, "" + parentId3, "1", k)); } } } //打乱集合中的数据 Collections.shuffle(pointList); //对集合中的数据重新排序 updateData(); } //对数据排序 深度优先 private void updateData() { for (TreePoint treePoint : pointList) { pointMap.put(treePoint.getID(), treePoint); } Collections.sort(pointList, new Comparator() { @Override public int compare(TreePoint lhs, TreePoint rhs) { int llevel = TreeUtils.getLevel(lhs, pointMap); int rlevel = TreeUtils.getLevel(rhs, pointMap); if (llevel == rlevel) { if (lhs.getPARENTID().equals(rhs.getPARENTID())) { //左边小 return lhs.getDISPLAY_ORDER() > rhs.getDISPLAY_ORDER() ? 1 : -1; } else { //如果父辈id不相等 //同一级别,不同父辈 TreePoint ltreePoint = TreeUtils.getTreePoint(lhs.getPARENTID(), pointMap); TreePoint rtreePoint = TreeUtils.getTreePoint(rhs.getPARENTID(), pointMap); return compare(ltreePoint, rtreePoint); //父辈 } } else { //不同级别 if (llevel > rlevel) { //左边级别大 左边小 if (lhs.getPARENTID().equals(rhs.getID())) { return 1; } else { TreePoint lreasonTreePoint = TreeUtils.getTreePoint(lhs.getPARENTID(), pointMap); return compare(lreasonTreePoint, rhs); } } else { //右边级别大 右边小 if (rhs.getPARENTID().equals(lhs.getID())) { return -1; } TreePoint rreasonTreePoint = TreeUtils.getTreePoint(rhs.getPARENTID(), pointMap); return compare(lhs, rreasonTreePoint); } } } }); adapter.notifyDataSetChanged(); } @Click void save_person_visitor_model() { if (checkedPerson == null) { return; } if ("temporary_person".equals(checkedPerson.getString("table"))) { byte[] camera_image_path = checkedPerson.getBlob("camera_image_path"); byte[] camera_image_feature = checkedPerson.getBlob("camera_image_feature"); checkedPerson = new ModelAdapter(BasicIdUtil.getPersonId()); checkedPerson.setString("table", "person"); saveBlob(checkedPerson, "camera_image_path", camera_image_path); saveBlob(checkedPerson, "camera_image_feature", camera_image_feature); } savePersonIdentity(checkedPerson.getId()); String name = et_input_name.getText().toString().trim(); String id_cars_number = et_input_id_card.getText().toString().trim(); String phone = et_input_phone.getText().toString().trim(); String register_model = et_register_model.getText().toString().trim(); String visited_person = et_visited_person.getText().toString().trim(); String remark = et_remark.getText().toString().trim(); checkedPerson.setString("name", name); checkedPerson.setString("id_card_number", id_cars_number); checkedPerson.setString("phone", phone); checkedPerson.setString("sign_up_method", register_model); checkedPerson.setString("sign_up_status", "已注册"); checkedPerson.setString("sign_up_rule", register_rule); checkedPerson.setString("visited_person", visited_person); checkedPerson.setString("remark", remark); // checkedPerson.setString("table", "person"); checkedPerson.setString("del_flag", "0"); checkedPerson.setString("sign_up_time", new Date().getTime() + ""); ToastUtil.show("保存成功"); PersonManager.savePerson(checkedPerson); } @Override public void show() { super.show(); ll_temp_person_check_identity.setVisibility(View.GONE); handler.postDelayed(myRunnable, 10000); initVideoView(); initImagePartOne(); initImagePartTwo(); initRegisterRule(); initPersonIdentity(null); initVisitedPerson(); setVisitorPerson(new ModelAdapter());// 为了在进入页面时初始化数据(都不显示) } @Override public void hide() { super.hide(); handler.removeCallbacks(myRunnable); } public void refreshPerson() { BaseApplication.getApplication().executorService.execute(() -> { partOnePersonList = TemporaryPersonManager.getTemporaryPersonList(leftCameraIp); partTwoPersonList = TemporaryPersonManager.getTemporaryPersonList(rightCameraIp); refreshUiThread(); }); } private void initVideoView() { List cameraDataList = VisitorModelManager.getCameraData(); if (cameraDataList.size() == 0) { ModelAdapter deviceDocument1 = new ModelAdapter(); ModelAdapter deviceDocument2 = new ModelAdapter(); setTwoCamera(deviceDocument1, deviceDocument2); } else if (cameraDataList.size() == 1) { ModelAdapter deviceDocument1 = cameraDataList.get(0); setOneCamera(deviceDocument1); } else { ModelAdapter deviceDocument1 = cameraDataList.get(0); ModelAdapter deviceDocument2 = cameraDataList.get(1); setTwoCamera(deviceDocument1, deviceDocument2); } } private void setOneCamera(ModelAdapter deviceDocument) { fl_image_part_one.setVisibility(View.GONE); fl_image_part_two.setVisibility(View.GONE); fl_image_only_one.setVisibility(View.VISIBLE); tv_text_checked.setVisibility(View.VISIBLE); tv_checked_identity_only_one.setVisibility(View.VISIBLE); ll_image_only_one_check_identity.setVisibility(View.VISIBLE); tv_image_only_one_name_top.setText(deviceDocument.getString("name")); tv_image_two_name.setText(deviceDocument.getString("name")); rightCameraIp = deviceDocument.getString("ip"); if (!TextUtils.isEmpty(rightCameraIp)) { ServerUIMain3 serverUIMain3 = new ServerUIMain3(); SocketClient3 server = new SocketClient3(rightCameraIp); server.setOnDataListener(serverUIMain3); server.start(); } } private void setTwoCamera(ModelAdapter deviceDocument1, ModelAdapter deviceDocument2) { fl_image_part_one.setVisibility(View.VISIBLE); fl_image_part_two.setVisibility(View.VISIBLE); fl_image_only_one.setVisibility(View.GONE); tv_text_checked.setVisibility(View.GONE); tv_checked_identity_only_one.setVisibility(View.GONE); ll_image_only_one_check_identity.setVisibility(View.GONE); tv_image_one_name_top.setText(deviceDocument1.getString("name")); tv_image_two_name_top.setText(deviceDocument2.getString("name")); tv_image_one_name.setText(deviceDocument1.getString("name")); tv_image_two_name.setText(deviceDocument2.getString("name")); leftCameraIp = deviceDocument1.getString("ip"); rightCameraIp = deviceDocument2.getString("ip"); if (!TextUtils.isEmpty(leftCameraIp)) { ServerUIMain serverUIMain = new ServerUIMain(); SocketClient server = new SocketClient(leftCameraIp); server.setOnDataListener(serverUIMain); server.start(); } if (!TextUtils.isEmpty(rightCameraIp)) { ServerUIMain2 serverUIMain = new ServerUIMain2(); SocketClient2 server = new SocketClient2(rightCameraIp); server.setOnDataListener(serverUIMain); server.start(); } } @UiThread public void setRemoteVideoImage(Bitmap bitmap) { iv_image_one.setImageBitmap(bitmap); } @UiThread public void setRemoteVideoImage2(Bitmap bitmap) { iv_image_two.setImageBitmap(bitmap); } @UiThread public void setRemoteVideoImage3(Bitmap bitmap) { iv_image_only_one.setImageBitmap(bitmap); } private void initPersonIdentity(ModelAdapter person) { if (person != null) { setIdentityWithPersonInThread(person.getId()); } allIdentityList.clear(); allIdentityList.addAll(IdentityManager.findIdentityList()); identityAdapter = new CommonAdapter(mainActivity(), R.layout.identity_checkbox_item2, allIdentityList) { @Override protected void convert(ViewHolder viewHolder, ModelAdapter item, int position) { CheckBox identityCB = viewHolder.getView(R.id.identity_checkbox); identityCB.setText(item.getString("name")); identityCB.setChecked(checkedIdentityMapByPerson.containsKey(item.getId())); identityCB.setClickable(true); if (person != null && "1".equals(person.getString("auto_init"))) { identityCB.setClickable(false); } else { identityCB.setClickable(true); identityCB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (checkedIdentityMapByPerson.containsKey(item.getId())) { checkedIdentityMapByPerson.remove(item.getId()); } else { checkedIdentityMapByPerson.put(item.getId(), item); } identityAdapter.notifyDataSetChanged(); } }); } } }; hlv_identity.setAdapter(identityAdapter); } public void setIdentityWithPersonInThread(String personId) { BaseApplication.getApplication().executorService.execute(() -> { if (personId != null) { checkedIdentityMapByPerson = PersonIdentityManager.findIdentityMapByPersonId(personId); } notifyIdentitySetChanged(); }); } @UiThread public void notifyIdentitySetChanged() { identityAdapter.notifyDataSetChanged(); } private void initImagePartOne() { partOnePersonList = TemporaryPersonManager.getTemporaryPersonList(leftCameraIp); partOneFaceAdapter = new PartOneFaceAdapter(); hlv_image_one.setAdapter(partOneFaceAdapter); hlv_image_one.setOnItemClickListener(new com.basic.security.widget.hlistview.AdapterView.OnItemClickListener() { @Override public void onItemClick(com.basic.security.widget.hlistview.AdapterView parent, View view, int position, long id) { ModelAdapter personDocument = VisitorModelManager.getTemPersonInPersonDb(partOnePersonList.get(position)); setVisitorPerson(personDocument); } }); } private void initImagePartTwo() { partTwoPersonList = TemporaryPersonManager.getTemporaryPersonList(rightCameraIp); partTwoFaceAdapter = new PartTwoFaceAdapter(); hlv_image_two.setAdapter(partTwoFaceAdapter); hlv_image_two.setOnItemClickListener(new com.basic.security.widget.hlistview.AdapterView.OnItemClickListener() { @Override public void onItemClick(com.basic.security.widget.hlistview.AdapterView parent, View view, int position, long id) { ModelAdapter personDocument = VisitorModelManager.getTemPersonInPersonDb(partTwoPersonList.get(position)); setVisitorPerson(personDocument); } }); } private void initRegisterRule() { ArrayAdapter adapter = new ArrayAdapter(getContext(), R.layout.spinner_item_small_text, arr); spinner_register_rule.setPopupBackgroundResource(R.color.press_menu_text); spinner_register_rule.setAdapter(adapter); spinner_register_rule.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { register_rule = arr[position]; } @Override public void onNothingSelected(AdapterView parent) { } }); } private void initVisitedPerson() { List visitedPersonList = new ArrayList<>(); CommonAdapter visitedImageAdapter = new CommonAdapter(mainActivity(), R.layout.face_view_image, visitedPersonList) { @Override protected void convert(ViewHolder viewHolder, ModelAdapter item, int position) { ImageView imageView = viewHolder.getView(R.id.face); byte[] blob = visitedPersonList.get(position).getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } imageView.setImageBitmap(bitmap); } }; gv_visited_person.setAdapter(visitedImageAdapter); gv_visited_person.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { setConnectPersonData(visitedPersonList.get(position)); } }); } private void setConnectPersonData(ModelAdapter personDocument) { byte[] blob = personDocument.getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } iv_contact_person.setImageBitmap(bitmap); tv_visited_person_name.setText(personDocument.getString("name")); tv_visited_person_identity.setText(personDocument.getString("")); tv_visited_person_department.setText(personDocument.getString("")); tv_visited_person_phone.setText(personDocument.getString("phone")); } private void setVisitorPerson(ModelAdapter visitorPersonDocument) { checkedPerson = visitorPersonDocument; byte[] blob = visitorPersonDocument.getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } iv_register_image.setImageBitmap(bitmap); et_input_name.setText(visitorPersonDocument.getString("name")); et_input_id_card.setText(visitorPersonDocument.getString("id_card_number")); et_input_phone.setText(visitorPersonDocument.getString("phone")); String type = visitorPersonDocument.getString("sign_up_method"); if ("自助注册".equals(type)) { if ("不需要验证身份证".equals(visitorPersonDocument.getString("verify_status"))) { type = type + "-普通验证"; } else { type = type + "-身份证验证"; } } else if ("管理员注册".equals(type)) { if ("不需要验证身份证".equals(visitorPersonDocument.getString("verify_status"))) { type = "人工注册-普通验证"; } else { type = "人工注册-身份证验证"; } } else if (TextUtils.isEmpty(type)) { type = "访客注册"; } et_register_model.setText(type); if (!TextUtils.isEmpty(visitorPersonDocument.getString("sign_up_time"))) { tv_register_time.setText(DateUtil.formatTime(Long.parseLong(visitorPersonDocument.getString("sign_up_time")), "yyyy-MM-dd HH:mm:ss")); } else { tv_register_time.setText(DateUtil.formatTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } if (visitorPersonDocument != null) { String signUpRule = visitorPersonDocument.getString("sign_up_rule"); if (!TextUtils.isEmpty(signUpRule)) { for (int i = 0; i < arr.length; i++) { String item = arr[i]; if (item.equals(signUpRule)) { spinner_register_rule.setSelection(i); break; } } } } et_visited_person.setText(visitorPersonDocument.getString("visited_person")); et_visited_reason.setText(visitorPersonDocument.getString("visited_reason")); et_remark.setText(visitorPersonDocument.getString("remark")); String lastTime = VisitManager.getLastVisitTime(visitorPersonDocument.getId()); if (TextUtils.isEmpty(lastTime)) { tv_visit_time.setText("暂无"); } else { tv_visit_time.setText(DateUtil.formatTime(Long.parseLong(lastTime), "yyyy-MM-dd HH:mm:ss")); } initPersonIdentity(visitorPersonDocument); } public boolean savePersonIdentity(String personId) { List nameList = new ArrayList<>(); for (ModelAdapter identityModelAdapter : checkedIdentityMapByPerson.values()) { if (identityModelAdapter != null && !TextUtils.isEmpty(identityModelAdapter.getString("name"))) { nameList.add(identityModelAdapter.getString("name")); } } if (nameList.contains("黑名单") && nameList.contains("管理员")) { ToastUtil.show("管理员和黑名单不能同时选中"); return false; } Map dbCheckedIdentityMapByPerson = PersonIdentityManager.findIdentityMapByPersonId(personId); for (String identityId : checkedIdentityMapByPerson.keySet()) { if (!dbCheckedIdentityMapByPerson.containsKey(identityId)) { PersonIdentityManager.save(personId, identityId); if (IdentityManager.findIdentityById(identityId) != null && "管理员".equals(IdentityManager.findIdentityById(identityId).getString("name"))) { PersonIdentityManager.saveAdminIdentity(personId); } } } for (String identityId : dbCheckedIdentityMapByPerson.keySet()) { if (!checkedIdentityMapByPerson.containsKey(identityId)) { PersonIdentityManager.delete(personId, identityId); if (IdentityManager.findIdentityById(identityId) != null && "管理员".equals(IdentityManager.findIdentityById(identityId).getString("name"))) { PersonIdentityManager.delAdminIdentity(personId); } } } return true; } private class IdentityAdapter extends BaseAdapter { private List identityList = new ArrayList(); public IdentityAdapter() { identityList = IdentityManager.findIdentityList(); } @Override public int getCount() { return identityList == null ? 0 : identityList.size(); } @Override public Object getItem(int position) { return identityList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; if (convertView == null) { //加载子布局 view = LayoutInflater.from(getContext()).inflate(R.layout.item_identity_list, parent, false); viewHolder = new ViewHolder(); viewHolder.checkBox = view.findViewById(R.id.item_ck); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } final ModelAdapter singleIdentityInAllIdentity = identityList.get(position); viewHolder.checkBox.setText(identityList.get(position).getString("name")); if (checkedIdentityMap.containsKey(singleIdentityInAllIdentity.getId())) { viewHolder.checkBox.setChecked(true); } else { viewHolder.checkBox.setChecked(false); } viewHolder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (checkedIdentityMap.containsKey(singleIdentityInAllIdentity.getId())) { checkedIdentityMap.remove(singleIdentityInAllIdentity.getId()); } else { checkedIdentityMap.put(singleIdentityInAllIdentity.getId(), singleIdentityInAllIdentity); } } }); return view; } class ViewHolder { CheckBox checkBox; } } private class PartOneFaceAdapter extends BaseAdapter { @Override public int getCount() { return partOnePersonList == null ? 0 : partOnePersonList.size(); } @Override public Object getItem(int position) { return partOnePersonList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.face_view_image, null); viewHolder = new ViewHolder(); viewHolder.imageView = convertView.findViewById(R.id.face); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } byte[] blob = partOnePersonList.get(position).getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } viewHolder.imageView.setImageBitmap(bitmap); return convertView; } class ViewHolder { ImageView imageView; } } private class PartTwoFaceAdapter extends BaseAdapter { @Override public int getCount() { return partTwoPersonList == null ? 0 : partTwoPersonList.size(); } @Override public Object getItem(int position) { return partTwoPersonList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.face_view_image, null); viewHolder = new ViewHolder(); viewHolder.imageView = convertView.findViewById(R.id.face); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } byte[] blob = partTwoPersonList.get(position).getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } viewHolder.imageView.setImageBitmap(bitmap); return convertView; } class ViewHolder { ImageView imageView; } } }