나는 20 EditTexts
과 함께 활동하고 있습니다. 아무 것도 입력되지 않았다면 메시지를 표시하고 싶습니다. 각 필드에 20 개의 리스너를 연결하는 대신 입력이 제공되었는지 (데이터가 변경되었는지) 확인할 수있는 방법이 있습니까?사용자가 필드 수신기없이 입력을했는지 어떻게 알 수 있습니까?
답변
어떻게 보일지의 생각이다. 사용자가 무언가를 입력 할 때 수행하려는 작업에 따라 특정 사례에 맞게 예제를 변경해야 할 수 있습니다. 당신이 상속됩니다있는
자료 활동
public abstract class BaseTextWatcherActivity extends Activity {
private TextWatcher mInputObserver = 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) {
onInputChange(s.toString());
}
};
private boolean mOptimize = false;
@Override
public void setContentView(int layoutResID) {
View content = getLayoutInflater().inflate(layoutResID, null);
initInputsObservers((ViewGroup) content);
mOptimize = true;
super.setContentView(content);
}
@Override
public void setContentView(View view) {
if (view instanceof EditText) {
((EditText) view).addTextChangedListener(mInputObserver);
} else if (view instanceof ViewGroup && !mOptimize) {
initInputsObservers((ViewGroup) view);
mOptimize = false;
}
super.setContentView(view);
}
/**
* Implement this method to allow your activities to get notified when one
* of their {@link EditText} widgets receives input from the user.
*
* @param s the string that was entered by the user in one of the EditTexts.
*/
public abstract void onInputChange(String s);
/**
* This will recursively go through the entire content view and add a
* {@link TextWatcher} to every EditText widget found.
*
* @param root
* the content view
*/
private void initInputsObservers(ViewGroup root) {
final int count = root.getChildCount();
for (int i = 0; i < count; i++) {
final View child = root.getChildAt(i);
if (child instanceof EditText) {
((EditText) child).addTextChangedListener(mInputObserver);
} else if (child instanceof ViewGroup) {
initInputsObservers((ViewGroup) child);
}
}
}
}
그런 다음 당신이 당신의 활동에해야 할 일은 당신이 사용자가에서 EditTexts
중 하나에 뭔가를 입력 있음을 알려하는 onInputchange
콜백을 구현한다 현재 레이아웃. 액티비티 클래스의 키 이벤트 콜백을 좀 더 단순하게 보길 원할 수도 있습니다. 그러나 내가 잘못 입력하지 않은 경우 해당 이벤트는 TextView
/EditText
위젯에서 사용됩니다.
Perfect !!!! 정확히 내가 찾고있는 것. 나는 오늘 그것을 시도 할 것이다. – Snake
귀하의 TextViews는 모두 addTextChangedListener()을 호출하여 귀하의 활동을 인수로 부여합니다 (this). 액티비티에 TextWatcher을 구현하고 afterTextChanged()를 재정의하십시오. TextView 중 하나가 변경 될 때마다 afterTextChanged()가 호출됩니다. 다음은 여기에 (있는 경우) 자신의 EditText
위젯 중 하나를 사용하는 경우 서브 클래스를 통지 돌봐 기본 클래스의 예입니다 코드가
public class YouActivity extends Activity implements TextWatcher{
@Override
public void onCreate(Bundle savedInstanceState)
{
[...]
textView1.addTextChangedListener(this);
textView2.addTextChangedListener(this);
[...]
}
@Override
public void afterTextChanged (Editable s)
{
//do something
}
}
내 질문에 명시된 것처럼 모든 필드 수신기를 포함하지 않는 솔루션을 찾고있었습니다. 예를 들어, 활동에 대한 일반적인 청취자가 변경 될 수 있습니까? 키보드 입력 등? – Snake
리스너가 없으면보기가 변경되었는지 알 수 없습니다. 키보드를 듣고 있습니까? 옵션이지만 단추를 누를 때마다 알림이 전송됩니다 (TextView 내에서 필요하지 않음). 리스너를 사용하고 싶지 않은 이유가 있습니까? –
textwatcher를 사용하여 edittext에 입력되는 모든 글자에 대한 알림을 받게됩니다. lsitener를 사용하고 싶지 않은 이유는 10 가지 이상의 활동이 있고 각 활동에 edittext와 spinners가 있기 때문입니다. 나는이 모든 활동들이 확장 된 기초 활동을 만들고 싶었고 그 기본 활동 내에서 "기초적인 활동"중 하나가 변경된 경우 메시지를 표시 할 수있는 "무언가"를했습니다. – Snake
- 1. 사용자가 로그인했는지 어떻게 알 수 있습니까?
- 2. 사용자가 Exposé 모드인지 어떻게 알 수 있습니까?
- 3. 사용자가 제출 요청을하면 어떻게 알 수 있습니까?
- 4. 사용자가 Facebook에 로그인했는지 어떻게 알 수 있습니까?
- 5. 트위터 사용자가 로그인했는지 어떻게 알 수 있습니까?
- 6. Openid, 사용자가 로그인했는지 어떻게 알 수 있습니까?
- 7. 사용자가 온라인 상태인지 어떻게 알 수 있습니까?
- 8. GPS 수신기없이 A-GPS를 사용할 수 있습니까?
- 9. jsp 필드 값이 Struts2에서 변경되었는지 여부를 어떻게 알 수 있습니까?
- 10. 어떻게 알 수 있습니까?
- 11. PHP에서 배열의 필드 이름을 자동으로 어떻게 알 수 있습니까?
- 12. 추천 사이트 사용자가 가입하거나 구매할 때를 어떻게 알 수 있습니까?
- 13. 리눅스에서는 사용자가 그룹에 추가/삭제 된시기를 어떻게 알 수 있습니까?
- 14. 현재 사용자가 해당 링크를 좋아했는지 어떻게 알 수 있습니까?
- 15. 주어진 Devise 사용자가 지금 로그인했는지 어떻게 알 수 있습니까?
- 16. 사용자가 어떤 운영 체제를 사용하고 있는지 어떻게 알 수 있습니까?
- 17. .click() 또는 사용자가 이벤트를 실행했는지 어떻게 알 수 있습니까?
- 18. 사용자가 Linux 머신에 로그인 할 때를 어떻게 알 수 있습니까?
- 19. 원격 사용자가 django에 연결되어 있는지 어떻게 알 수 있습니까?
- 20. , 사용자가 이미 제품 (소모품)을 구입했는지 어떻게 알 수 있습니까?
- 21. 자바 서블릿 - 사용자가 휴대 기기에서 왔는지 어떻게 알 수 있습니까?
- 22. 사용자가 이미 Facebook에 로그인 한 것을 어떻게 알 수 있습니까?
- 23. Android 2.2 사용자가 타이핑 할 때를 어떻게 알 수 있습니까?
- 24. 사용자가 Android 앱을 '업그레이드'또는 '설치'하고 있는지 어떻게 알 수 있습니까?
- 25. 사용자가 키보드를 사용하지 않고 있는지 어떻게 알 수 있습니까?
- 26. 사용자가 Eclipse를 최소화/최대화 할 때를 어떻게 알 수 있습니까?
- 27. 사용자가 첫 페이지를 탐색하고 있음을 어떻게 알 수 있습니까?
- 28. 사용자가 브라우저에 입력하는 인코딩을 어떻게 알 수 있습니까?
- 29. 사용자가 설정 앱에 있는지 어떻게 알 수 있습니까?
- 30. 내 Canvas 앱에서 사용자가 어디서 왔는지 어떻게 알 수 있습니까?
가장 간단한 방법은 'EditTexts'에 하나의'TextWatcher'를 첨부하고'afterTextChanged' 메소드에서 텍스트를 얻는 것을 볼 수 있다면'EditTexts' 중 하나에 입력 한 것을 알 수 있습니다. – Luksprog
내 질문에 명시된 것처럼 모든 필드 수신기를 포함하지 않는 솔루션을 찾고 있습니다. 예를 들어, 활동에 대한 일반적인 청취자가 변경 될 수 있습니까? 키보드 입력 등? – Snake