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