android edittext onchange listener
나는 조금 알고 TextWatcher
있지만 그것은 당신이 입력하는 모든 캐릭터에서 발생합니다. 사용자가 편집을 마칠 때마다 실행되는 리스너를 원합니다. 가능할까요? 또한 TextWatcher
인스턴스를 Editable
얻지 만 인스턴스가 필요합니다 EditText
. 어떻게 얻습니까?
편집 : 두 번째 질문이 더 중요합니다. 대답 해주세요.
첫째, 사용자 EditText
가 포커스를 잃었거나 완료 버튼을 눌렀을 때 사용자가 텍스트 편집을 완료했는지 확인할 수 있습니다 (이는 구현 및 가장 적합한 항목에 따라 다름). 둘째,을 인스턴스 객체로 선언 한 경우에만 에서 EditText
인스턴스를 가져올 수 없습니다 . 안전하지 않기 때문에 내부를 편집해서는 안됩니다 .TextWatcher
EditText
EditText
TextWatcher
편집하다:
EditText
인스턴스를 TextWatcher
구현 으로 가져 오려면 다음과 같이 시도해야합니다.
public class YourClass extends Activity {
private EditText yourEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
yourEditText = (EditText) findViewById(R.id.yourEditTextId);
yourEditText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
// you can call or do what you want with your EditText here
// yourEditText...
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
}
}
위의 샘플에는 약간의 오류가있을 수 있지만 예를 보여 드리고자합니다.
모든 EditText 필드에 대한 리스너를 구현하려면 추악하고 장황한 코드가 필요했기 때문에 아래 클래스를 작성했습니다. 이것에 걸려 넘어지는 사람에게 유용 할 수 있습니다.
public abstract class TextChangedListener<T> implements TextWatcher {
private T target;
public TextChangedListener(T target) {
this.target = target;
}
@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) {
this.onTextChanged(target, s);
}
public abstract void onTextChanged(T target, Editable s);
}
이제 리스너를 구현하는 것이 조금 더 깔끔합니다.
editText.addTextChangedListener(new TextChangedListener<EditText>(editText) {
@Override
public void onTextChanged(EditText target, Editable s) {
//Do stuff
}
});
얼마나 자주 발생하는지에 관해서 //Do stuff
는 주어진 a 가 발생한 후에 원하는 코드를 실행하기위한 검사를 구현할 수 있습니다 .
ButterKnife를 사용하는 모든 사람 . 다음과 같이 사용할 수 있습니다.
@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {
}
나는 그것을 사용하여했다 AutotextView
:
AutotextView textView = (AutotextView) findViewById(R.id.autotextview);
textView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
seq = cs;
}
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
new SearchTask().execute(seq.toString().trim());
}
});
myTextBox.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
TextView myOutputBox = (TextView) findViewById(R.id.myOutputBox);
myOutputBox.setText(s);
}
});
TextWatcher
그것은 모든 것을 위해 계속 발사 EditText
하고 서로의 가치를 엉망 으로 만들기 때문에 나를 위해 일하지 않았습니다 .
내 해결책은 다음과 같습니다.
public class ConsultantTSView extends Activity {
.....
//Submit is called when I push submit button.
//I wanted to retrieve all EditText(tsHours) values in my HoursList
public void submit(View view){
ListView TSDateListView = (ListView) findViewById(R.id.hoursList);
String value = ((EditText) TSDateListView.getChildAt(0).findViewById(R.id.tsHours)).getText().toString();
}
}
Hence by using the getChildAt(xx)
method you can retrieve any item in the ListView
and get the individual item using findViewById
. And it will then give the most recent value.
As far as I can think bout it, there's only two ways you can do it. How can you know the user has finished writing a word? Either on focus lost, or clicking on an "ok" button. There's no way on my mind you can know the user pressed the last character...
So call onFocusChange(View v, boolean hasFocus)
or add a button and a click listener to it.
참고URL : https://stackoverflow.com/questions/11134144/android-edittext-onchange-listener
'code' 카테고리의 다른 글
콘솔에서 Subversion을 사용할 때 비밀번호를 저장하는 방법 (0) | 2020.08.20 |
---|---|
max_allowed_packet mysql 변수 확인 및 설정 방법 (0) | 2020.08.20 |
단일 SQL 문에 대한 열 헤더 출력을 억제하려면 어떻게해야합니까? (0) | 2020.08.20 |
Kubernetes 포드가 삭제되면 다시 생성됩니다. (0) | 2020.08.20 |
PHP를 사용하여 여러 파일을 zip 파일로 다운로드 (0) | 2020.08.20 |