私は少し知っていますTextWatcher
が、それはあなたが入力したすべての文字に発火します. ユーザーが編集を終了するたびに起動するリスナーが必要です。出来ますか?また、TextWatcher
のインスタンスを取得しますが、のインスタンスEditable
が必要ですEditText
。どうすればそれを取得できますか?
編集: 2 番目の質問はより重要です。それに答えてください。
私は少し知っていますTextWatcher
が、それはあなたが入力したすべての文字に発火します. ユーザーが編集を終了するたびに起動するリスナーが必要です。出来ますか?また、TextWatcher
のインスタンスを取得しますが、のインスタンスEditable
が必要ですEditText
。どうすればそれを取得できますか?
編集: 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) {}
});
}
}
上記のサンプルにはいくつかのエラーがある可能性があることに注意してください。ただし、例を示したかっただけです。
すべての 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
、特定のイベントの後に目的のコードを実行するチェックを実装できます
ButterKnifeを使用しているすべてのユーザー。次のように使用できます。
@OnTextChanged(R.id.zip_code)
void onZipCodeTextChanged(CharSequence zipCode, int start, int count, int after) {
}
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)
か、ボタンに追加します。