我知道一点点TextWatcher
但触发您所输入的每一个字符。 我想时触发的用户完成编辑的侦听器。 可能吗? 此外,在TextWatcher
我得到的实例, Editable
,但我需要的一个实例EditText
。 我如何获得的?
编辑 :第二个问题更重要。 请回答这个问题。
我知道一点点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) {}
});
}
}
需要注意的是,上述样本可能有一些错误,但我只是想告诉你一个例子。
任何使用ButterKnife。 你可以使用这样的:
@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {
}
这是困扰我的是执行我的所有的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
后给予
我一直在使用做到了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();
}
}
因此,通过使用getChildAt(xx)
方法可以检索在任何项目ListView
,并使用获得的单个项目findViewById
。 它将然后给最近的值。
至于我能想到它回合的话,只有两种方法可以做到这一点。 你怎么能知道用户已经写完一个字? 无论是在焦点消失,或点击“确定”按钮。 有没有办法在我心中,你可以知道用户按下的最后一个字符...
于是呼onFocusChange(View v, boolean hasFocus)
或添加一个按钮,点击收听它。