在Recyclerveiw中设置edittext

时间:2017-11-20 12:12:04

标签: android android-recyclerview recycler-adapter android-viewholder

我有一个recyclelerview包含edittext和textview,我在recyclerview外面有一个按钮。我想在点击按钮(edittext.setError(“required”))上验证edittext,为此我使用了addTextChangedListener,并在onTextChanged()方法中存储了Hashmap中的charSequence .Below是我的onBindViewHolder

    @Override
public void onBindViewHolder(ViewHolder holder, final int position) {



    String label = mData.get(position).getLabel();
    holder.label.setText(label);

    holder.label_input.setTag(position);

    holder.label_input.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
          //  Log.w("ontextchanged","i = "+i+" i1 = "+i1+" i2 = "+i2+""+"char seq "+charSequence.toString()+"position = "+position);
            stringHashMap.put(""+position,""+charSequence);

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });


}

在点击按钮的活动中根据位置获取存储的值,下面是活动按钮onclick

    submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {


        for (int i = 0; i< TimeSheetDetailAdapter.stringHashMap.size(); i++) {

            //Entered edittext value from hashmap
            String data = TimeSheetDetailAdapter.stringHashMap.get(""+i);


            }

    }
});

我根据位置正确地获取数据中输入的edittext值,但问题是我想验证每个edittext,如果数据为空,我想用edittext.setError设置特定的edittext(“required” ),为此我试过

 if(recyclerView.findViewHolderForLayoutPosition(i) instanceof TimeSheetDetailAdapter.ViewHolder){
                    TimeSheetDetailAdapter.ViewHolder childHolder = (TimeSheetDetailAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(i);

                    childHolder.label_input.setError("required");

但它只是将错误设置为屏幕中的可见项目,即只有编辑文本可见才会设置,该项目是不可见的,它不会设置。我知道recyclerview的概念,我也尝试过findViewHolderForAdapterPosition(),但没有帮助,请帮我解决这个问题,我如何访问隐形的视图,设置eroor或任何其他方式。

提前谢谢

2 个答案:

答案 0 :(得分:1)

您可以分别根据其位置制作要在回收者列表中显示的消息的arraylist。

并访问该数组列表以在标签中设置它。我认为这可能只是解决方案。因为您无法访问不可见的列表项。

答案 1 :(得分:0)

我最终找到了一个更好的解决方案

 if (data.equals("empty") || data.equals("")) {

                        isAllDataFilled = false;
                        //Scrolling to the respective position
                        linearLayoutManager.scrollToPositionWithOffset(i, 0);

                        //giving delay of 200ms to get the view and then setting error for that
                        new Handler().postDelayed(new Runnable() {

                            @Override
                            public void run() {

                                TimeSheetDetailAdapter.ViewHolder childHolder = (TimeSheetDetailAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(i);
                                childHolder.label_input.setError("error");
                            }
                        }, 200);


                        enteredDataList.clear();
                        break;
                    }

谢谢