在项目中要求使用recycleview嵌套edittext进行输入,点击item中的增加按钮会增加一个item,删除按钮删除当前item,从网上查到一些给edittext设置tag。
下面是我用的方法,我用的adapter:
public class PfUnderlyAddAdapter extends RecyclerView.Adapter<PfUnderlyAddAdapter.MyViewHolder> {
private List<String> mlist;
private Context mcontext;
private List<String> alist = new ArrayList<>();//第一个输入框数据
private List<String> llist = new ArrayList<>();//第二个输入框数据
private List<String> clist = new ArrayList<>();//第三个输入框数据
//点击事件
public interface OnItemDelClickListener{
void onItemDelClick(View view, int position);//删除
void onItemAddClick(View view, int position);//增加
}
private OnItemDelClickListener mOnItemDelClickListener;
public void setOnItemDelClickListener(OnItemDelClickListener mOnItemDelClickListener){
this.mOnItemDelClickListener = mOnItemDelClickListener;
}
public PfUnderlyAddAdapter(List<String> mlist, Context mcontext) {
this.mlist = mlist;
this.mcontext = mcontext;
//初始化数据
for(int i=0;i<mlist.size();i++){
alist.add(i,"");
llist.add(i,"");
clist.add(i,"");
}
}
// 添加数据
public void addData(int position,String msg) {
mlist.add(position, msg);
alist.add(position,"");
llist.add(position,"");
clist.add(position,"");
//添加动画
notifyItemInserted(position);
}
// 删除数据
public void removeData(int position) {
if(position!=0){
mlist.remove(position);
alist.remove(position);
llist.remove(position);
clist.remove(position);
//删除动画
notifyDataSetChanged();
}else{
ToastUtil.showShortToast("最少保留一个");
}
}
//获取数据--
public List<String> getAListData(){
return alist;
}
//获取数据
public List<String> getLListData(){
return llist;
}
//获取数据
public List<String> getCListData(){
return clist;
}
@NonNull
@Override
public PfUnderlyAddAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.pf_addunderly_item_layout,viewGroup,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final PfUnderlyAddAdapter.MyViewHolder myViewHolder, int i) {
//设置删除取消输入框的tag
//设置第一个输入框=============================分割线============================
if (myViewHolder.et_address.getTag() instanceof TextWatcher){
myViewHolder.et_address.removeTextChangedListener ((TextWatcher)myViewHolder.et_address.getTag());
}
myViewHolder.et_address.setText(alist.get(i));
//1.新建一个监听
TextWatcher watcher = new TextWatcher() {
@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) {
if(TextUtils.isEmpty(s.toString())){
alist.add(i,"");
}else {
alist.add(i,s.toString());
}
}
};
//2.添加一个监听
myViewHolder.et_address.addTextChangedListener(watcher);
//3.设置一个Tag
myViewHolder.et_address.setTag(watcher);
if (myViewHolder.et_linkman.getTag() instanceof TextWatcher){
myViewHolder.et_linkman.removeTextChangedListener ((TextWatcher)myViewHolder.et_linkman.getTag());
}
myViewHolder.et_linkman.setText(llist.get(i));
//设置第二个输入框=============================分割线============================
//1.新建一个监听
TextWatcher lwatcher = new TextWatcher() {
@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) {
if(TextUtils.isEmpty(s.toString())){
llist.add(i,"");
}else {
llist.add(i,s.toString());
}
}
};
//2.添加一个监听
myViewHolder.et_linkman.addTextChangedListener(lwatcher);
//3.设置一个Tag
myViewHolder.et_linkman.setTag(lwatcher);
if (myViewHolder.et_call.getTag() instanceof TextWatcher){
myViewHolder.et_call.removeTextChangedListener ((TextWatcher)myViewHolder.et_call.getTag());
}
myViewHolder.et_call.setText(clist.get(i));
//设置第三个输入框=============================分割线============================
//1.新建一个监听
TextWatcher cwatcher = new TextWatcher() {
@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) {
if(TextUtils.isEmpty(s.toString())){
clist.add(i,"");
}else {
clist.add(i,s.toString());
}
}
};
//2.添加一个监听
myViewHolder.et_call.addTextChangedListener(cwatcher);
//3.设置一个Tag
myViewHolder.et_call.setTag(cwatcher);
//点击事件
//判断是否设置了监听器
if(mOnItemDelClickListener != null){
//为ItemView设置监听器
myViewHolder.li_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemDelClickListener.onItemDelClick(myViewHolder.li_del,myViewHolder.getAdapterPosition());
}
});
myViewHolder.li_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemDelClickListener.onItemAddClick(myViewHolder.li_add,myViewHolder.getAdapterPosition());
}
});
}
}
@Override
public int getItemCount() {
if(mlist.size()!=0){
return mlist.size();
}else{
return 0;
}
}
@Override
public int getItemViewType(int position) {
return position;
}
class MyViewHolder extends RecyclerView.ViewHolder{
EditText et_address,et_linkman,et_call;
LinearLayout li_add,li_del;
public MyViewHolder(View itemView) {
super(itemView);
et_address = itemView.findViewById(R.id.pf_addunderly_ky_item_etaddress);
et_linkman = itemView.findViewById(R.id.pf_Addunderly_ky_item_etlinkman);
et_call = itemView.findViewById(R.id.pf_Addunderly_ky_item_etcall);
li_add = itemView.findViewById(R.id.pf_addunderly_ky_item_tvadd);
li_del = itemView.findViewById(R.id.pf_addunderly_ky_item_tvdel);
}
}
}
亲测解决了自己的问题。如果不行那么您在去找找如果有更好的解决方法,请留言,大家一起学习。