Android中ListView中包含Button時滑動丟失選中狀態的解決方法(二)
阿新 • • 發佈:2019-02-14
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 + '\'' + '}'; } }