0

I have created dynamic edittext forms using recylerview view adapter. I need to validate all of the empty fields.

  1. I have submit button on VendorFormActivity and have to submit from the field of adapter, so I have created the button click of activity from adapter.

  2. Also I have call retrofit API from adapter while submitting button.

  3. I have four case of JSON data type: type of string, int, date, and dropdown to make forms in Android.

  4. Problem is in some fields, there's only string type and if I validate all at once, the app crashes, and also only in last field validation messages is seen. So, having problem with it.

  5. I also need to ask on which method I need to call submit button on adapter or I need to call from Activity itself. For now have called submit button on onBindViewHolder.

  6. Code of Adapter posted here:

@Override
public void onBindViewHolder(final DynamicFormAdapter.MyViewHolder holder, final int position) {


    final HelpForm.FormSetting formSetting = formArrayList.get(position);


    if (formSetting.getType().equals("STRING")) {


        holder.textViewString = new TextView(activity);
        holder.linearLayout.addView(holder.textViewString);
        holder.textViewString.setText(formSetting.getLabel());
        holder.textViewString.setPadding(24, 4, 24, 2);
        holder.textViewString.setTextColor(context.getResources().getColor(R.color.colorTexts));
        holder.textViewString.setTextSize(15);


        holder.autoCompleteFields = new AutoCompleteTextView(activity);
        holder.linearLayout.addView(holder.autoCompleteFields);
        holder.autoCompleteFields.addTextChangedListener(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) {

                formSetting.setAnswer(s.toString());
                Log.e("VALUEstringsssss ", formSetting.getAnswer());


            }
        });
        holder.textViewString.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ArrayList<String> gee = new ArrayList<>();
                gee.add("hello");
                gee.add("namaste");
                buttonCallBacks.onButtonClick(gee);
            }
        });


    }

    if (formSetting.getType().equals("INT")) {
        Log.d("cjjdnjcnjd", formSetting.getId());

        holder.autoCompleteFields = new AutoCompleteTextView(activity);


        holder.textViewInt = new TextView(activity);
        holder.linearLayout.addView(holder.textViewInt);
        holder.textViewInt.setText(formSetting.getLabel());
        holder.textViewInt.setPadding(24, 4, 24, 2);
        holder.textViewInt.setTextColor(context.getResources().getColor(R.color.colorTexts));
        holder.textViewInt.setTextSize(15);


        holder.linearLayout.addView(holder.autoCompleteFields);
        holder.autoCompleteFields.setInputType(InputType.TYPE_CLASS_NUMBER);


        holder.autoCompleteFields.addTextChangedListener(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) {
                formSetting.setAnswer(s.toString());
                IntValue = s.toString();
                editTextInt.add(formSetting.getAnswer());


            }
        });

    }
    if (formSetting.getType().equals("DATE")) {
        holder.textViewDate = new TextView(context);
        holder.editTextDate = new EditText(context);
        holder.autoCompleteFields = new AutoCompleteTextView(context);
        holder.linearLayout.addView(holder.textViewDate);
        holder.linearLayout.addView(holder.editTextDate);
        holder.linearLayout.addView(holder.autoCompleteFields);

        holder.textViewDate.setText(formSetting.getLabel());
        holder.textViewDate.setPadding(24, 4, 24, 2);
        holder.textViewDate.setTextColor(context.getResources().getColor(R.color.colorTexts));
        holder.textViewDate.setTextSize(15);

        holder.editTextDate.setCursorVisible(false);
        holder.editTextDate.setFocusable(false);
        holder.autoCompleteFields.setVisibility(View.GONE);

        holder.editTextDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputMethodManager mgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.showSoftInput(holder.editTextDate, InputMethodManager.SHOW_FORCED);
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog datePickerDialog = new DatePickerDialog(context,
                        new DatePickerDialog.OnDateSetListener() {

                            @Override
                            public void onDateSet(android.widget.DatePicker view, int year,
                                                  int monthOfYear, int dayOfMonth) {


                                // holder.editTextDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
                                SimpleDateFormat fr = new SimpleDateFormat("dd-MM-yyyy");
                                mydate = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
                                //  textViewShow.setText(dd);
                                Date date = null;
                                try {
                                    date = fr.parse(mydate);
                                } catch (ParseException e) {
                                    e.printStackTrace();
                                }
                                long milliseconds = date.getTime();
                                Log.d("cbhfeey", String.valueOf(milliseconds));
                                holder.autoCompleteFields.setText(String.valueOf(milliseconds));
                                holder.editTextDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);

                            }
                        }, mYear, mMonth, mDay);
                datePickerDialog.show();
            }
        });


        holder.autoCompleteFields.addTextChangedListener(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) {


                formSetting.setAnswer(s.toString());

            }
        });
    }


    if (formSetting.getType().equals("DROPDOWN")) {
        holder.textViewSpinner = new TextView(context);
        holder.linearLayout.addView(holder.textViewSpinner);
        holder.textViewSpinner.setText(formSetting.getLabel());
        holder.textViewSpinner.setPadding(16, 4, 24, 4);

        holder.autoCompleteFields = new AutoCompleteTextView(context);

        holder.autoCompleteFields.setCursorVisible(false);
        holder.autoCompleteFields.setFocusable(false);
        holder.linearLayout.addView(holder.autoCompleteFields);
        holder.autoCompleteFields.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.dropdown, 0);
        //autoCompleteTextViewSpinner.setPadding(0,0,16,0);

        ArrayList<String> err = new ArrayList<>();
        err = formSetting.getOptions();

        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                context, android.R.layout.simple_list_item_1, err);
        holder.autoCompleteFields.setAdapter(arrayAdapter);
        holder.autoCompleteFields.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                holder.autoCompleteFields.showDropDown();
            }
        });

        holder.autoCompleteFields.addTextChangedListener(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) {
                formSetting.setAnswer(s.toString());


            }
        });




    }
    VendorFormActivity.save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            JsonArray datas = new JsonArray();

            for (HelpForm.FormSetting pn : formArrayList) {

                JsonObject object = new JsonObject();
                object.addProperty("id", pn.getId());
                object.addProperty("label", pn.getLabel());
                object.addProperty("value", pn.getAnswer());
                datas.add(object);


            }

            JsonObject req = new JsonObject();
            req.addProperty("jjj", new Gson().toJson(datas));
            ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add(String.valueOf(datas));

            Log.d("hellodatas", String.valueOf(datas));

            if (holder.autoCompleteFields.getText().toString().isEmpty()){
                holder.autoCompleteFields.setError("Field must not be empty!");
            }else {
                callRetrofitSaveForm(datas);

            }


        }
    });


}



public void callRetrofitSaveForm(JsonArray data) {


    userID = new PrefsManager(MasterApplication.getmInstance()).getUserId();

    vendorID = new PrefsManager(MasterApplication.getmInstance()).getVendorId();
    Log.d("jjdjd", vendorID);
    RestClient.RetroInterfaceAPI mInterface = RestClient.getClient();
    Call<SaveForm> call = mInterface.getSaveForm(vendorID, userID, String.valueOf(data));
    call.enqueue(new Callback<SaveForm>() {
        @Override
        public void onResponse(Call<SaveForm> call, Response<SaveForm> response) {
            Log.d("jcjdcjj", "" + response.code());
            if (response.code() == 500) {
                Toast.makeText(context, context.getResources().getText(R.string.server_error), Toast.LENGTH_SHORT).show();

            }

            if (response.body() != null) {

                if (response.body().getMessage().equals("success")) {
                    Toast.makeText(context, context.getResources().getText(R.string.success_form), Toast.LENGTH_SHORT).show();
                    //((VendorFormActivity)context).recreate();
                    ((VendorFormActivity) context).onBackPressed();
                }


            } else {

            }


        }

        @Override
        public void onFailure(Call<SaveForm> call, Throwable t) {

        }
    });
}


@Override
public int getItemCount() {

    return formArrayList.size();

}

@Override
public int getItemViewType(int position) {
    return position;
}


public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView textViewString, textViewInt, textViewDate;
    ViewGroup linearLayout;
    EditText editTextINT, editTextDate, hideEditTextDate;
    Spinner spinner;
    TextView textViewSpinner;
    AutoCompleteTextView autoCompleteFields;


    public MyViewHolder(View itemView) {
        super(itemView);
        linearLayout = itemView.findViewById(R.id.dynamiccontainer);


    }


}
K.Dᴀᴠɪs
  • 9,649
  • 11
  • 33
  • 43
Elisha
  • 37
  • 6
  • Here is the solution of your problem [How can I validate recyclerview adapter TextInputEditText from fragment?](https://stackoverflow.com/questions/51454613/how-can-i-validate-recyclerview-adapter-textinputedittext-from-fragment/51454770#51454770) – AskNilesh Nov 26 '18 at 09:04
  • I have tried every stackover flow answers and couldnot solve. So, I am compelled to ask here – Elisha Nov 26 '18 at 09:05
  • check the link i have given in above comment its same as your question – AskNilesh Nov 26 '18 at 09:06
  • Yes I have checked the above answer before and could not get the solution from there, I guess my scenario is different . Please help me on this. – Elisha Nov 26 '18 at 09:20

0 Answers0