adapter , 用的第三方 https://github.com/CymChad/BaseRecyclerViewAdapterHelper
package com.senseplay.ssp.ui.adapter;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.senseplay.ssp.R;
import com.senseplay.ssp.observer.AdapterCallBack;
import com.senseplay.ssp.ui.activity.MainActivity;
import com.senseplay.ssp.ui.bean.UserDeviceBean;
import com.senseplay.ssp.ui.widgt.CustomDialog;
import com.senseplay.ssp.ui.widgt.XToast;
import com.senseplay.ssp.util.UIUtil;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
/**
* * description :
* * Author : Vily
* * Date : 2019/2/13
*
**/
public class UserDeviceAdapter extends BaseQuickAdapter<UserDeviceBean, BaseViewHolder> {
private Map<Integer, String> map = new HashMap<>();
public UserDeviceAdapter(@Nullable List<UserDeviceBean> data) {
super(R.layout.adapter_user_device, data);
}
public UserDeviceAdapter() {
super(R.layout.adapter_user_device);
}
// @Override
// public void onBindViewHolder(BaseViewHolder holder, int position) {
// holder.setIsRecyclable(false);
// super.onBindViewHolder(holder, position);
//
// }
@Override
protected void convert(final BaseViewHolder helper, final UserDeviceBean item) {
Log.i(TAG, "convert: -----------:" + helper.getLayoutPosition());
ImageView iv_icon = helper.getView(R.id.iv_icon);
final ImageView iv_edit = helper.getView(R.id.iv_edit);
final ImageView iv_refresh = helper.getView(R.id.iv_refresh);
final ProgressBar pb_refresh = helper.getView(R.id.pb_refresh);
final EditText et_device_name = helper.getView(R.id.et_device_name);
TextView tv_code = helper.getView(R.id.tv_code);
final TextView tv_reset = helper.getView(R.id.tv_reset);
final TextView tv_device_name = helper.getView(R.id.tv_device_name);
if (item != null && !TextUtils.isEmpty(item.getAlias())) {
tv_device_name.setText(item.getAlias());
et_device_name.setText(item.getAlias());
} else {
tv_device_name.setText("---");
}
if(map!=null && map.size()>0 && map.containsKey(helper.getLayoutPosition())){
String content = map.get(helper.getLayoutPosition());
if(!TextUtils.isEmpty(content)){
et_device_name.setText(content);
}
}
if (item != null && !TextUtils.isEmpty(item.getAccess_code())) {
tv_code.setText(mContext.getResources().getString(R.string.authorized_code, item.getAccess_code()));
} else {
tv_code.setText(mContext.getResources().getString(R.string.authorized_code, ""));
}
//
if (item.isSelector()) {
tv_device_name.setVisibility(View.GONE);
et_device_name.setVisibility(View.VISIBLE);
et_device_name.setFocusable(false);
iv_edit.setSelected(true);
} else {
tv_device_name.setVisibility(View.VISIBLE);
et_device_name.setVisibility(View.GONE);
iv_edit.setSelected(false);
}
// if (item.isRefresh()) {
// iv_refresh.setVisibility(View.GONE);
// pb_refresh.setVisibility(View.VISIBLE);
// } else {
// iv_refresh.setVisibility(View.VISIBLE);
// pb_refresh.setVisibility(View.GONE);
// }
Log.i(TAG, "convert: ---------map:"+map);
//失去焦点
et_device_name.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
String trim = et_device_name.getText().toString().trim();
if (!hasFocus) {
// UIUtil.hideKeyboard((MainActivity) mContext, et_device_name);
UIUtil.hide((MainActivity) mContext);
map.put(helper.getLayoutPosition(),trim);
} else {
if (!TextUtils.isEmpty(trim)) {
et_device_name.setSelection(et_device_name.getText().length());
}
}
}
});
et_device_name.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
et_device_name.setFocusable(true);
et_device_name.setFocusableInTouchMode(true);
et_device_name.requestFocus();
return false;
}
});
// 修改名字
iv_edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String et_name = et_device_name.getText().toString().trim();
if (!iv_edit.isSelected()) {
if (!TextUtils.isEmpty(et_name)) {
et_device_name.setSelection(et_device_name.getText().length());
}
for (UserDeviceBean userBean : mData) {
if (userBean.isSelector()) {
userBean.setSelector(false);
}
}
item.setSelector(true);
notifyDataSetChanged();
return;
} else {
if (!TextUtils.isEmpty(et_name)) {
// // 修改用户名
if (mOnUserDeviceClickListener != null) {
iv_edit.setClickable(false);
iv_refresh.setVisibility(View.GONE);
pb_refresh.setVisibility(View.VISIBLE);
mOnUserDeviceClickListener.onModifyName(et_name, item.getSn(), new AdapterCallBack() {
@Override
public void requestSuccess(boolean b) {
iv_edit.setClickable(true);
if (b) {
item.setAlias(et_name);
XToast.showToast(mContext, R.string.name_modify, Toast.LENGTH_SHORT, true);
}
item.setSelector(false);
notifyDataSetChanged();
}
});
}else{
item.setSelector(false);
notifyDataSetChanged();
}
} else {
XToast.showToast(mContext, R.string.name_empty);
}
return;
}
}
});
// 重置
tv_reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(item.isSelector()){
// et_device_name.setFocusable(false);
UIUtil.hide((MainActivity) mContext);
}
CustomDialog.Builder builder = new CustomDialog.Builder(mContext);
CustomDialog customDialog = builder.setTitle(R.string.authorize_reset)
.setContent(R.string.is_reset_device)
.setNegativeButton(R.string.cancel, new CustomDialog.OnClickListener() {
@Override
public void onClick(CustomDialog dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton(R.string.confirm, R.color.red, new CustomDialog.OnClickListener() {
@Override
public void onClick(CustomDialog dialog, int which) {
dialog.dismiss();
if (mOnUserDeviceClickListener != null) {
iv_refresh.setVisibility(View.GONE);
pb_refresh.setVisibility(View.VISIBLE);
mOnUserDeviceClickListener.onResetCode(item.getSn(), helper.getLayoutPosition(), new AdapterCallBack() {
@Override
public void requestSuccess(boolean b) {
}
});
}
}
})
.show();
}
});
}
private OnUserDeviceClickListener mOnUserDeviceClickListener;
public interface OnUserDeviceClickListener {
void onModifyName(String name, String sn, AdapterCallBack callBack);
void onResetCode(String sn, int position, AdapterCallBack callBack);
}
public void setOnUserDeviceClickListener(OnUserDeviceClickListener onUserDeviceClickListener) {
mOnUserDeviceClickListener = onUserDeviceClickListener;
}
}
package com.senseplay.ssp.ui.bean;
/**
* * description :
* * Author : Vily
* * Date : 2019/2/13
*
**/
public class UserDeviceBean {
private String openid; // 用户openid
private String did; // 设备id
private String type_id; // 分类1 device 2:rc
private String access_code; // 授权码
private String alias; // 设备名称
private String sn; // 设备 sn
private boolean isSelector; // 解决数据复用的问题
private boolean isRefresh=false;
public UserDeviceBean() {
}
public UserDeviceBean( String openid, String did, String type_id, String access_code, String alias, String sn) {
this.openid = openid;
this.did = did;
this.type_id = type_id;
this.access_code = access_code;
this.alias = alias;
this.sn = sn;
}
public boolean isSelector() {
return isSelector;
}
public void setSelector(boolean selector) {
isSelector = selector;
}
public boolean isRefresh() {
return isRefresh;
}
public void setRefresh(boolean refresh) {
isRefresh = refresh;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getDid() {
return did;
}
public void setDid(String did) {
this.did = did;
}
public String getType_id() {
return type_id;
}
public void setType_id(String type_id) {
this.type_id = type_id;
}
public String getAccess_code() {
return access_code;
}
public void setAccess_code(String access_code) {
this.access_code = access_code;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
}