recycleview 一个烦人的复用问题, 带 editext , 已解决

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;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值