|
@@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
|
+import android.util.Log;
|
|
|
import android.view.View;
|
|
|
import android.widget.EditText;
|
|
|
import android.widget.ImageView;
|
|
@@ -25,12 +26,18 @@ import com.hanghui.senic.controller.DXAllInOneIDCardNewController;
|
|
|
import com.hanghui.senic.service.usbserialdemo.utile.ConfigManager;
|
|
|
import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
|
|
|
import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
|
|
|
+import com.jcodecraeer.xrecyclerview.XRecyclerView;
|
|
|
|
|
|
import java.lang.reflect.Type;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
+/**
|
|
|
+ * 人员数据
|
|
|
+ */
|
|
|
public class PersonnelDataActivity extends BaseActivity implements View.OnClickListener {
|
|
|
|
|
|
private TextView setUPIncloud_title;
|
|
@@ -40,7 +47,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
private ImageView personnelData_inquireImage;
|
|
|
private TextView personnelData_inquireText;
|
|
|
private LinearLayout personnelData_queryCondition_Linear;
|
|
|
- private RecyclerView personnelData_RecyclerView;
|
|
|
+ private XRecyclerView personnelData_RecyclerView;
|
|
|
private PersonnelDataAdapter personnelDataAdapter;
|
|
|
private List<UserFaceData.Data.Item> list = new ArrayList<>();
|
|
|
private int page = 1;
|
|
@@ -52,8 +59,9 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
private EditText queryCondition_inputPhone;
|
|
|
private TextView personnelData_input_empty;//清空按钮
|
|
|
private TextView personnelData_input_search;//搜索按钮
|
|
|
- private List<User> userList = new ArrayList<>();
|
|
|
+// private List<User> userList = new ArrayList<>();
|
|
|
private AddListDataThread addListDataThread;
|
|
|
+ private boolean isFlushLoop = true;//是否刷新数据
|
|
|
|
|
|
@Override
|
|
|
public int getLayout() {
|
|
@@ -71,6 +79,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|
|
|
if (addListDataThread != null) {
|
|
|
+ isFlushLoop = false;
|
|
|
addListDataThread.interrupt();
|
|
|
addListDataThread = null;
|
|
|
}
|
|
@@ -99,57 +108,60 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
|
|
|
manager.setOrientation(LinearLayoutManager.VERTICAL);
|
|
|
personnelData_RecyclerView.setLayoutManager(manager);
|
|
|
- //list赋值
|
|
|
- addList(page);
|
|
|
personnelDataAdapter = new PersonnelDataAdapter(list, PersonnelDataActivity.this);
|
|
|
personnelData_RecyclerView.setAdapter(personnelDataAdapter);
|
|
|
+// personnelData_RecyclerView.setPullRefreshEnabled(false);//禁止下拉刷新
|
|
|
// 添加RecyclerView的滚动监听来实现上拉加载
|
|
|
- personnelData_RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
|
+ personnelData_RecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
|
|
|
@Override
|
|
|
- public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
|
|
- super.onScrollStateChanged(recyclerView, newState);
|
|
|
- // 在这里处理滑动状态改变,如停止滑动
|
|
|
- if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
|
|
- AppHandler.getHandler().post(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- if (list.size() > 0){
|
|
|
- boolean reachedEnd = !recyclerView.canScrollVertically(1);
|
|
|
- if (reachedEnd) {
|
|
|
- // 上拉加载数据的逻辑
|
|
|
- loadMoreData();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
+ public void onRefresh() {
|
|
|
+ //下拉刷新
|
|
|
+ isFlushLoop = true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
|
|
- super.onScrolled(recyclerView, dx, dy);
|
|
|
+ public void onLoadMore() {
|
|
|
+ // 上滑加载数据的逻辑
|
|
|
+ loadMoreData();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private void addList(int page) {
|
|
|
int size;
|
|
|
- if (userList.size() <= 20){
|
|
|
- size = userList.size();
|
|
|
+ ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
|
|
|
+ if (userMap == null ){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Collection<User> values = userMap.values();
|
|
|
+ if (values.size() <= 20){
|
|
|
+ size = values.size();
|
|
|
}else {
|
|
|
size = page * 20;
|
|
|
}
|
|
|
- for (int i = 0; i < size; i++) {
|
|
|
+ int currentSubscript = 0;//获取当前下标,处理数据
|
|
|
+ for (User value : values) {
|
|
|
+ currentSubscript++;
|
|
|
+ if (currentSubscript == size){
|
|
|
+ break;
|
|
|
+ }
|
|
|
UserFaceData.Data.Item item = new UserFaceData.Data.Item();
|
|
|
- UserInfoBean userInfoBean = ConfigManager.getGson().fromJson(userList.get(i).getUserInfo(), UserInfoBean.class);
|
|
|
- item.setUserName(userInfoBean.getUserName());
|
|
|
- item.setPhoto(userInfoBean.getPhoto());
|
|
|
- item.setPhone(userInfoBean.getPhone());
|
|
|
- item.setIdNumber(userInfoBean.getIdNumber());
|
|
|
- item.setCardIdEx(userInfoBean.getCardIdEx());
|
|
|
- item.setUserId(userInfoBean.getUserId());
|
|
|
- list.add(item);
|
|
|
+ if (value != null){
|
|
|
+ UserInfoBean userInfoBean = ConfigManager.getGson().fromJson(value.getUserInfo(), UserInfoBean.class);
|
|
|
+ item.setUserName(userInfoBean.getUserName());
|
|
|
+ item.setPhoto(userInfoBean.getPhoto());
|
|
|
+ item.setPhone(userInfoBean.getPhone());
|
|
|
+ item.setIdNumber(userInfoBean.getIdNumber());
|
|
|
+ item.setCardIdEx(userInfoBean.getCardIdEx());
|
|
|
+ item.setUserId(userInfoBean.getUserId());
|
|
|
+ list.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //数据去重
|
|
|
+ for (UserFaceData.Data.Item element : list) {
|
|
|
+ if (!list.contains(element)) {
|
|
|
+ list.add(element);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -164,13 +176,8 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
page++;
|
|
|
//list赋值
|
|
|
addList(page);
|
|
|
- //数据去重
|
|
|
- for (UserFaceData.Data.Item element : list) {
|
|
|
- if (!list.contains(element)) {
|
|
|
- list.add(element);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
+ personnelData_RecyclerView.loadMoreComplete();
|
|
|
personnelDataAdapter.notifyDataSetChanged();
|
|
|
}
|
|
|
|
|
@@ -220,17 +227,18 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
|
|
|
private List<UserFaceData.Data.Item> searchList(String id, String cardNumber, String name, String idNumber, String phone){
|
|
|
List<UserFaceData.Data.Item> itemList = new ArrayList<>();
|
|
|
+ ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
|
|
|
//当搜索条件为空时,重新添加数据
|
|
|
if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
|
|
|
&& StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
|
|
|
- for (User item : userList) {
|
|
|
+ for (User item : userMap.values()) {
|
|
|
UserFaceData.Data.Item userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), UserFaceData.Data.Item.class);
|
|
|
itemList.add(userInfoBean);
|
|
|
}
|
|
|
return itemList;
|
|
|
}
|
|
|
|
|
|
- for (User item : userList) {
|
|
|
+ for (User item : userMap.values()) {
|
|
|
UserFaceData.Data.Item userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), UserFaceData.Data.Item.class);
|
|
|
// 比较当前元素是否等于 "Apple"
|
|
|
String userId = String.valueOf(userInfoBean.getUserId());
|
|
@@ -263,23 +271,27 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
|
|
|
@Override
|
|
|
public void run() {
|
|
|
super.run();
|
|
|
- //添加数据
|
|
|
- Map<String,User> userMap = FaceApi.getInstance().getUsers();
|
|
|
- // 获取Map转换为List时的泛型类型
|
|
|
- Type listType = new TypeToken<List<User>>() {}.getType();
|
|
|
- // 将Map转换为List
|
|
|
- userList = new Gson().fromJson(ConfigManager.getGson().toJson(userMap.values()), listType);
|
|
|
- runOnUiThread(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- if (list.size() == 0){
|
|
|
+ while (true){
|
|
|
+ //当isFlushLoop为false时,不做后续刷新处理,等待状态改变后,再次执行后续方法
|
|
|
+ if (!isFlushLoop){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ isFlushLoop = false;
|
|
|
+ runOnUiThread(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ list.clear();
|
|
|
addList(page);
|
|
|
+ if (personnelDataAdapter != null ){
|
|
|
+ personnelDataAdapter.notifyDataSetChanged();
|
|
|
+ }
|
|
|
+ if (personnelData_RecyclerView != null ){
|
|
|
+ personnelData_RecyclerView.refreshComplete();
|
|
|
+ }
|
|
|
}
|
|
|
- if (personnelDataAdapter != null ){
|
|
|
- personnelDataAdapter.notifyDataSetChanged();
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|