1. 程式人生 > >Android中ListView中包含Button時滑動丟失選中狀態的解決方法(二)

Android中ListView中包含Button時滑動丟失選中狀態的解決方法(二)

1.介面卡中的主要邏輯:

import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.tokenloan.lightwallet.R;
import com.tokenloan.lightwallet.bean.model.CheckBean;
import com.tokenloan.lightwallet.utils.ToastUtil;
import com.tokenloan.lightwallet.view.property.bean.Assets;
import com.tokenloan.lightwallet.view.property.bean.TokenBean;
import com.tokenloan.lightwallet.view.property.bean.TokenIconBean;

import java.util.List;


/**
 * 搜尋Token
 * Created by sgf on 2018/8/10.
 */

public class SearchTokenAdapter extends BaseAdapter {
//    private List<CheckBean> list;
    private List<TokenBean> list;
    private TokenIconBean.DataBean data;
    private LayoutInflater inflater;
    private Context context;


    public SearchTokenAdapter(Context context) {
        inflater = LayoutInflater.from(context);
    }


    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
        notifyDataSetChanged();
    }
    public void setData(List<TokenBean> lists) {
        list = lists;
        notifyDataSetChanged();
    }
    public void setDataIcon(TokenIconBean.DataBean datas) {
        data = datas;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        if (list == null) {
            return 0;
        }
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        SearchTokenAdapter.ViewHolder viewHolder = null;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.search_token_item, null);
            viewHolder = new ViewHolder();
            viewHolder.iv_addTokenIcon = convertView.findViewById(R.id.iv_addTokenIcon);
            viewHolder.tv_addTokenName = convertView.findViewById(R.id.tv_addTokenName);
            viewHolder.tv_addTokenContent = convertView.findViewById(R.id.tv_addTokenContent);
            viewHolder.tv_addTokenAddress = convertView.findViewById(R.id.tv_addTokenAddress);
            viewHolder.bt_searchAdd = convertView.findViewById(R.id.bt_searchAdd);
            convertView.setTag(viewHolder);

        } else {
            viewHolder = (SearchTokenAdapter.ViewHolder) convertView.getTag();
        }
        String currency = list.get(position).getCurrency();
        viewHolder.tv_addTokenName.setText(currency);
        viewHolder.tv_addTokenContent.setText(list.get(position).getContent());
        viewHolder.tv_addTokenAddress.setText(list.get(position).getAddress());
        if(currency.equalsIgnoreCase("TL")){
            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.tl));
        }else if(currency.equalsIgnoreCase("ETH")){
            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.eth));
        }else if(currency.equalsIgnoreCase("USDT")){
            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.usdt));
        }else if(currency.equalsIgnoreCase("DAI")){
            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.dai));
        }

//        String icon = data.getIcon();
//        if(currency.equalsIgnoreCase("TL")&& !TextUtils.isEmpty(icon)){
//            Glide.with(context).load(icon).into(viewHolder.iv_addTokenIcon);
//        }else {
//            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.tl));
//        }
//        if(currency.equalsIgnoreCase("ETH")&& !TextUtils.isEmpty(icon)){
//            Glide.with(context).load(icon).into(viewHolder.iv_addTokenIcon);
//        }else {
//            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.eth));
//        }
//
//        if(currency.equalsIgnoreCase("USDT")&& !TextUtils.isEmpty(icon)){
//            Glide.with(context).load(icon).into(viewHolder.iv_addTokenIcon);
//        }else {
//            viewHolder.iv_addTokenIcon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.usdt));
//        }

        final ViewHolder finalViewHolder = viewHolder;

        String status = list.get(position).isChecked()?"已新增":"新增";
        finalViewHolder.bt_searchAdd.setText(status);

        viewHolder.bt_searchAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showShort(context,"ADD   " + position);
                finalViewHolder.bt_searchAdd.setText("已新增");

                list.get(position).setChecked(true);
            }
        });
//        viewHolder.tv_addTokenContent.setText(list.get(position));
//        viewHolder.tv_addTokenAddress.setText(list.get(position));
//        viewHolder.switch_addToken.setChecked(isSelected.get(position));
//        final int pos  = position; //pos必須宣告為final
//        viewHolder.bt_searchAdd.setTag(position);

//        viewHolder.bt_searchAdd.setOnCheckedChangeListener(null);
//        viewHolder.bt_searchAdd.setChecked(list.get(position).isChecked());
//        viewHolder.bt_searchAdd.setOnCheckedChangeListener(onCheckedChangeListener);

        return convertView;
    }

    public static class ViewHolder {
        public ImageView iv_addTokenIcon;//icon
        public TextView tv_addTokenName;//token名稱
        public TextView tv_addTokenContent;//token內容
        public TextView tv_addTokenAddress;//token地址
        public Button bt_searchAdd;//新增
    }
}

2.實體類:

/**
 * Token資料
 */
public class TokenBean {

    private String picture;
    private String currency;
    private String content;
    private String address;
    private boolean isChecked;

    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean checked) {
        isChecked = checked;
    }

    public TokenBean() {
    }

    public TokenBean(String picture, String currency, String content, String address) {
        this.picture = picture;
        this.currency = currency;
        this.content = content;
        this.address = address;
    }

    public TokenBean(String picture, String currency, String content, String address, boolean isChecked) {
        this.picture = picture;
        this.currency = currency;
        this.content = content;
        this.address = address;
        this.isChecked = isChecked;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "TokenBean{" +
                "picture=" + picture +
                ", currency='" + currency + '\'' +
                ", content='" + content + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}