Проблема с вводом данных в EditText

174
05 ноября 2018, 15:40

В прокуте есть страница что получает с базы переменные, которые указывают какие View элементы должны быть созданы програмно, через код. На телефонах с версиями Android от 6.0, во все EditText получается написать данные, но на Android 5.1 не получается ввести данные.

Если быть точнее EditText выглядит будто задан setEnabled(false), но элемент фокусится и также даёт написать данные в него, но не отображает их. Если при помощи кнопки назад вернуться на предыдущее окно, то элементы показываются в EditText.

Если надо что либо добавить в вопрос, пишите так как я просто не представляю как показать данный процесс

На гифке попробовал показать проблему

В данной функции я проверяю параметры в inputParams и смотря на флаги что указаны в них создаю элементы и добавляю в layout

private void buildForm(View parent, List<PaymentParams> inputParams) {
Collections.sort(inputParamses);
int edit_text_padding = (int) getActivity().getResources().getDimension(R.dimen.editTx_padding);
//Adding input forms
LinearLayout form = parent.findViewById(R.id.inputParamsContainer);
form.removeAllViewsInLayout();
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(0, dpToPx(10), 0, dpToPx(10));
RelativeLayout.LayoutParams relparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
relparams.setMargins(0, dpToPx(10), 0, dpToPx(10));
for (PaymentParams params : inputParamses) {
    if (params.getParamType().equalsIgnoreCase("T") || params.getParamType().equalsIgnoreCase("N") || params.getParamType().equalsIgnoreCase("F") || params.getParamType().equalsIgnoreCase("I")) {
        LinearLayout linearLayout = new LinearLayout(getActivity());
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        MyTextView textView = new MyTextView(getActivity());
        textView.setHint(params.getName());
        textView.setLayoutParams(layoutParams);
        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.dimen_12sp));
        textView.setTextColor(getResources().getColor(R.color.colorDark));
        textView.setGravity(Gravity.LEFT);
        textView.setText(params.getName());
        linearLayout.addView(textView);
        textView.setVisibility(View.VISIBLE);
        final MaskEditText editText = new MaskEditText(getActivity());
        // set inputType of EditText
        if (params.getParamType().equals("T"))
            editText.setInputType(InputType.TYPE_CLASS_TEXT);
        if (params.getParamType().equals("N"))
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        if (params.getParamType().equals("F"))
            editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
        if (params.getParamType().equals("I"))
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        if (params.getIsReadOnly().equals("Y"))
            editText.setEnabled(false);
        editText.setHint(params.getHint());
        editText.setLayoutParams(layoutParams);
        editText.setHintTextColor(getResources().getColor(R.color.colorDark));
        editText.setPadding(edit_text_padding, edit_text_padding, edit_text_padding, edit_text_padding);
        editText.setBackground(getResources().getDrawable(R.drawable.edit_text_box));
        editText.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.dimen_14sp));
        editText.setTextColor(getResources().getColor(R.color.colorDark));
        editText.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
        if (params.getCode().equals("CARD_TRANSFER")) {
            cardNumber = editText;
            cardNumber.setMask("#### #### #### ####");
            cardNumber.setSelection(cardNumber.getText().length());
            cardNumber.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(final Editable s) {
                    final String text = s.toString().replace(" ", "");
                    if (text.length() == 16) {
                        // CHECK USER CARD ON DB
                    } else {
                        aboutUser.setVisibility(View.GONE);
                    }
                }
            });
            aboutUser = new MyTextView(getActivity());
            aboutUser.setHint(params.getName());
            aboutUser.setLayoutParams(layoutParams);
            aboutUser.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.dimen_14sp));
            aboutUser.setTextColor(getResources().getColor(R.color.colorGrey));
            aboutUser.setGravity(Gravity.LEFT);
            aboutUser.setText("");
            linearLayout.addView(aboutUser);
            aboutUser.setVisibility(View.GONE);
        }
        if (params.getPaymentDetailCode().equals("CELL_PHONE") || params.getCode().equals("TELEPHONE")) {
            if (phoneNumber != null)
                linearLayout.removeView(phoneNumber);
            phoneNumber = editText;
            phoneNumber.setMaxLength(16);
            phoneNumber.setSelection(phoneNumber.getText().length());
            phoneNumber.setMask("###### ### ## ##");
            phoneNumber.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_form_phone, 0, 0, 0);
            phoneNumber.setCompoundDrawablePadding(25);
        }
        if (params.getCode().equals("SUM")) {
            RelativeLayout relativeLayout = new RelativeLayout(getActivity());
            relativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
            amountEdit = new MaskEditText(getActivity());
            if (params.getParamType().equals("T"))
                amountEdit.setInputType(InputType.TYPE_CLASS_TEXT);
            if (params.getParamType().equals("N"))
                amountEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
            if (params.getParamType().equals("F"))
                amountEdit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
            if (params.getParamType().equals("I"))
                amountEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
            if (params.getIsReadOnly().equals("Y"))
                amountEdit.setEnabled(false);
            amountEdit.setHint(params.getHint());
            amountEdit.setBackground(getResources().getDrawable(R.drawable.edit_text_box));
            amountEdit.setLayoutParams(relparams);
            amountEdit.setHintTextColor(getResources().getColor(R.color.colorDark));
            amountEdit.setPadding(edit_text_padding, edit_text_padding, edit_text_padding, edit_text_padding);
            amountEdit.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.dimen_14sp));
            amountEdit.setTextColor(getResources().getColor(R.color.colorDark));
            amountEdit.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
            amountEdit.addTextChangedListener(onTextAmountChangedListener());
            amountEdit.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_form_payment, 0, 0, 0);
            amountEdit.setCompoundDrawablePadding(((int) getResources().getDimension(R.dimen.editTx_padding)));
            amountEdit.setTag(params.getCode());
            if (params.getDefValue().length() > 0 && !params.getDefValue().equals("0"))
                amountEdit.setText(params.getDefValue());
            relativeLayout.addView(amountEdit);
            linearLayout.addView(relativeLayout);
        } else {
            editText.setTag(params.getCode());
            if (params.getDefValue().length() > 0 && !params.getDefValue().equals("0"))
                editText.setText(params.getDefValue());
            linearLayout.addView(editText);
        }
        if (!params.getIsVisible().equals("Y")) linearLayout.setVisibility(View.GONE);
        form.addView(linearLayout);
    } else if (params.getParamType().equalsIgnoreCase("S")) {
        Spinner spinner = new Spinner(getActivity());
        spinner.setLayoutParams(layoutParams);
        spinner.setPadding(dpToPx(10), dpToPx(10), dpToPx(10), dpToPx(10));
        spinner.setTag(params.getCode());
        String empty_string;
        MobileDBHelper dbHelper = new MobileDBHelper(getActivity().getBaseContext());
        refParamList = new ArrayList<>();
        try {
            refParamList = dbHelper.getRefParamList(params.getRefCode(), null);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        spinnerList = new ArrayList<>();
        for (int i = 0; i < refParamList.size(); i++) {
            CodeAndName codeAndName = new CodeAndName();
            codeAndName.setCode(refParamList.get(i).getCode());
            codeAndName.setName(refParamList.get(i).getName());
            spinnerList.add(codeAndName);
        }
        if (params.getRefCode().trim().length() == 0) {
            EmptyCodeAndNameAdapter codeAndNameAdapter = new EmptyCodeAndNameAdapter(getActivity(), android.R.layout.simple_spinner_item, spinnerList);
            spinner.setAdapter(codeAndNameAdapter);
        } else {
            CodeAndNameAdapter adapter = new CodeAndNameAdapter(getActivity(), android.R.layout.simple_spinner_item, spinnerList);
            spinner.setAdapter(adapter);
        }
        if (params.getCode().equals("SECTOR")) {
            spinner.setOnItemSelectedListener(sectorListener);
        } else {
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    if (((CodeAndName) parent.getAdapter().getItem(position)).getCode().equals("empty")) {
                        TextView selectedText = (TextView) parent.getChildAt(0);
                        if (selectedText != null) {
                            selectedText.setTextColor(Color.RED);
                        }
                    }
                }
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });
        }
        if (!params.getIsVisible().equals("Y")) spinner.setVisibility(View.GONE);
        form.addView(spinner);
        if (params.getIsReadOnly().equals("Y")) spinner.setEnabled(false);
        if (params.getDefValue().length() > 0) {
            for (int index = 0; index < spinnerList.size(); index++) {
                if (spinnerList.get(index).getCode().equals(params.getDefValue())) {
                    spinner.setSelection(index);
                    break;
                }
            }
        }
    }
}
Button submit = parent.findViewById(R.id.btnMakePayment);
submit.setAllCaps(false);
submit.setOnClickListener(this);
}

PS. На других устройствах всё работает, проверил на версиях Android < 5.1 и начиная с 6.0 всё работает

Answer 1

Решение нашлось, данная страница открывалась как фрагмент и вызывал следующим кодом

        getSupportFragmentManager().beginTransaction()
            .addToBackStack(null)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .add(R.id.pay_company_container, fragment)
            .commit();
}

Получилось что, убрав .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) поле начало принимать данные.

то есть Решением стало

            getSupportFragmentManager().beginTransaction()
            .addToBackStack(null)
            .add(R.id.pay_company_container, fragment)
            .commit();
}
READ ALSO
NoDefClassFoundError при запуски TestNg тестов на Jenkins

NoDefClassFoundError при запуски TestNg тестов на Jenkins

Регулярно получаю NoDefClassFoundError, при запуске тестов на дженкинсеРаньше это были классы из других модулей, но сейчас начали падать и классы из одного...

175
Сохранение состояний Fragment`ов

Сохранение состояний Fragment`ов

У меня на главной странице BottomNavigationView(BNV), а для контента использую FrameLayout, не ViewPagerВ BNV 5 пунктов, соответственно 5 Framentов

179
Log4j в файл и консоль в одном приложении

Log4j в файл и консоль в одном приложении

Как сконфигурировать properties так, чтобы можно было одним логгером писать в консоль, а другим в файл ?? Вот мои properties

163