普通Listview載入列表,最後一行是帶輸入框的顯示問題
1.定義實體,需要基本的四個欄位
private String text;//普通的
private String customText;//帶輸入框的
private int tag = 1;// 0、帶輸入框,1、不帶輸入框
private boolean isCheck;
1)可以根據設定ischeck來設定選中圖片的顏色
2)根據定義一個int 型別的值來(或者boolean值) 來判斷他選中的是帶輸入框的還是不帶輸入框的
2.介面卡的設定
1)設定他的檢視層
定義2個型別的檢視,設定一個int值的屬性;例如:1 為普通的 2 為帶輸入框的顯示;
---設定檢視層有多種方法
第一種:
return getItem(position).getTitle().indexOf("自定義") > -1 ? 1 : 0;
第二種:
if (position == getCount() - 1) {
return 0;
}
return 1;
if (getItemViewType(position) == 0) {
return R.layout.item_cn_payout_matter_edit;
}
return R.layout.item_cn_payout_matter_edit_lable;
2)介面卡賦值的時候
需要給不同的元件根據定義來的賦值,新增帶輸入框的時候設定他的額外的點選事件
if (data.isCheck()) { lableViewHolder.checkIv.setImageResource(R.mipmap.ic_selected); } else { lableViewHolder.checkIv.setImageResource(R.mipmap.ic_un_select); }
以上是是根據ischeck來設定他的選擇圖片的狀態 到最後去關聯檢視到i這邊來設定
⭐⭐⭐⭐⭐⭐⭐
帶輸入框的.setOnTouchListener(new CustomOnTouchListener(position));
帶輸入框的.setOnFocusChangeListener(new CustomOnFocusChangeListener(position));
這裡為自定義的滑動和監聽事件!!!
class CustomTextWatcher implements TextWatcher {
private int position;
public CustomTextWatcher(int position) {
this.position = position;
}
public void setPosition(int position) {
this.position = position;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
getItem(position).setCustomTitle(s.toString());//為輸入的位置內容設定陣列管理器,防止item重用機制導致的上下內容一樣的問題
}
}
class CustomOnTouchListener implements View.OnTouchListener {
private int position;
public CustomOnTouchListener(int position) {
this.position = position;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
clickListener.onClick(position);
}
return false;
}
}
class CustomOnFocusChangeListener implements View.OnFocusChangeListener {
private int position;
public CustomOnFocusChangeListener(int position) {
this.position = position;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
EditText et = (EditText) v;
if (watcher == null) {
watcher = new CustomTextWatcher(position);
}
if (hasFocus) {
watcher.setPosition(position);
et.addTextChangedListener(watcher);//設定edittext內容監聽
} else {
et.removeTextChangedListener(watcher);
}
}
}
需要先在前面初始化他的屬性
private CustomTextWatcher watcher;
public ClickListener clickListener;
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
在外面定義一個監聽介面
public interface ClickListener { public void onClick(Object ... objects); }
最後在activity或者fragment中進行判斷設定 根據實際情況來定
adapter.setClickListener(new ClickListener() {
@Override
public void onClick(Object... objects) {
cleanCheck((Integer) objects[0]);
}
});
adapter.addDataList(dataList);
}
//清空
private void cleanCheck(int position) {
for (int i = 0; i < adapter.getCount(); i++) {
adapter.getItem(i).setCheck(false);
}
adapter.getItem(position).setCheck(true);
adapter.notifyDataSetChanged();
}