Samira Radwan Ответов: 0

Android edittext settext во фрагменте


Всем Привет,
У меня есть простой фрагмент внутри у меня есть EditText. Я пытаюсь установить EditText setText onCreateView, onResume и onStart но я не мог заставить текст Показать. setHint работает просто отлично, в отличие от setText. есть идеи, в чем может быть причина?
Заранее спасибо!!

Что я уже пробовал:

XML:
EditText находится внутри ScrollView
<EditText

	android:id="@+id/output_value"

	android:layout_width="match_parent"

	android:layout_height="wrap_content"

	android:inputType="number"

	android:maxLength="3"

	android:hint="@string/output_function_value_hint"

	android:layout_marginStart="20dp"

	android:layout_marginEnd="20dp"

	android:saveEnabled="false"/>


onCreateView:
private View rootView;
private EditText outputEditText;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
	rootView = inflater.inflate(R.layout.fragment_io,container,false);	

	outputEditText = rootView.findViewById(R.id.output_value);       
	outputEditText.addTextChangedListener(new TextWatcher() {
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) { }
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
		@Override
		public void afterTextChanged(Editable s) {
			if(!TextUtils.isEmpty(s.toString())){
				try{
					if(Integer.valueOf(outputEditText.getText().toString()) > MAX_OUTPUT_VALUE || Integer.valueOf(outputEditText.getText().toString()) <MIN_OUTPUT_VALUE ){
						Toast.makeText(getSmartControlActivity(), getString(R.string.output_function_value_hint),Toast.LENGTH_SHORT).show();
						outputEditText.setText("");
					}
				}catch(NumberFormatException ex){
					ex.printStackTrace();
					outputEditText.setText("");
				}
			}
		}
	});

  //....

	return rootView;
}


Попытка установить текст onResume или onStart безрезультатно
@Override
    public void onResume() {
        super.onResume();
        outputEditText.setText("42");
    }

    @Override
    public void onStart(){
        super.onStart();
        
        outputEditText.setText("42"); //,TextView.BufferType.EDITABLE
    }

David Crow

Если бы я рискнул предположить, я бы сказал, что звонки в setText("42") в onResume() и onStart() запускаем afterTextChanged() обработчик, таким образом стирая текст.

Почему бы вам не прокомментировать это addTextChangedListener() обработчик, чтобы сузить проблему?

Samira Radwan

@David Crow, вы абсолютно правы, удалив addTextChangedListner() устраните эту проблему. мой вопрос заключается в том, что если я не могу использовать addTextChangedListner (), что следует сделать для обработки любых проверок EditText? или, может быть, есть способ установить текст, не вызывая его? я знаю, что не могу этого сделать onCreateView

David Crow

"...что нужно сделать, чтобы справиться с любыми проверками EditText?"

Видеть здесь.

0 Ответов