普通Listview加载列表,最后一行是带输入框的显示问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34812958/article/details/74820692

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



猜你喜欢

转载自blog.csdn.net/qq_34812958/article/details/74820692