TextWatcher
については少し知っていますが、入力したすべての文字で起動します。ユーザーが編集を終了するたびに起動するリスナーが必要です。出来ますか?また、TextWatcher
でEditable
のインスタンスを取得しますが、EditText
のインスタンスが必要です。どうやって手に入れますか?
EDIT:2番目の質問の方が重要です。答えてください。
最初に、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) {
}
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
を使用して個々のアイテムを取得できます。そして、最新の値を提供します。
私がそれについて考えることができる限り、あなたがそれをすることができる2つの方法だけがあります。ユーザーが単語を書き終えたことをどうやって知ることができますか?フォーカスが失われたか、「OK」ボタンをクリックします。ユーザーが最後のキャラクターを押したことを知ることができる方法はありません...
したがって、onFocusChange(View v, boolean hasFocus)
を呼び出すか、ボタンとクリックリスナーを追加します。