RecycleView是常用的列表控件,在日常的开发中使用频率很高,使用起来很方便,只要设置好条目布局和数据就可以完美的展示数据。EditText是常用的输入控件,用于用户的数据输入。二者本来各自使用都很容易,但是如果放到一起就出现问题,条目的复用导致EditText输入的内容出现错乱,焦点的获取也混乱了,令很多新手大为头疼。
基本的思路是要在条目的可见和隐藏时处理好焦点的问题,要将操作的EditText的位置坐标记录下来,进行有效管理,还有将输入框的显示和隐藏也管理起来。解决的代码本身并不复杂,注释也标识出来了。之前写过一个List View和EditText搭配使用的文章,这里算是更新吧,并且输入框也增加了多个输入框的处理逻辑。
核心的Adapter代码如下:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String TAG="MyAdapter";
private List<ItemDataEntity> list;
private Context mContext;
private final InputMethodManager inputMethodManager;
//edittext的焦点position位置
int etFocusPos = -1;
private int idSelectView=-1;
public MyAdapter(List<ItemDataEntity> list, Context mContext) {
this.list = list;
this.mContext = mContext;
inputMethodManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, null);
ViewHolder viewHolder = new ViewHolder(inflate);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.tvNum.setText("序号:"+list.get(position).getNum());
holder.tvName.s