android textwatcher 获取当前控件,TextWatcher如何找到调用它的EditText
和我在南方一起工作的朋友說,“南北方的差異其實蠻大的。”我家在北方,也在南方工作,不過我倒是覺得差異不怎么大,因為我在北方的時候,就沒有女朋友,而來到了南方,同樣沒有女朋友。
開發時遇到一個問題,如同標題,當一個類繼承了TextWatcher時,倘若這個類中有很多EditText控件,那么如何知道調用TextWatcher的是哪一個EditText控件呢?如果一個類繼承的是OnClickListener,那可以通過View獲取控件的Id值,從而分辨控件,做對應操作。可惜TextWatcher似乎沒有類似的方法。我是這樣解決的:
布局文件:
很簡單,只是寫了幾個EditText控件。
主類:
package?com.example.edittexttest;
import?android.app.Activity;
import?android.os.Bundle;
import?android.text.Editable;
import?android.text.TextWatcher;
import?android.view.View;
import?android.widget.EditText;
import?android.widget.TextView;
import?android.widget.Toast;
public?class?EditTextTest?extends?Activity?{
EditText?edit1,?edit2,?edit3,?edit4,?edit5;
@Override
protected?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_text_test);
edit1?=?(EditText)?findViewById(R.id.edit1);
edit1.addTextChangedListener(new?ClassOfTextWatcher(edit1));
setCursorToEnd(edit1);
edit2?=?(EditText)?findViewById(R.id.edit2);
edit2.addTextChangedListener(new?ClassOfTextWatcher(edit2));
setCursorToEnd(edit2);
edit3?=?(EditText)?findViewById(R.id.edit3);
edit3.addTextChangedListener(new?ClassOfTextWatcher(edit3));
setCursorToEnd(edit3);
edit4?=?(EditText)?findViewById(R.id.edit4);
edit4.addTextChangedListener(new?ClassOfTextWatcher(edit4));
setCursorToEnd(edit4);
edit5?=?(EditText)?findViewById(R.id.edit5);
edit5.addTextChangedListener(new?ClassOfTextWatcher(edit5));
setCursorToEnd(edit5);
}
private?class?ClassOfTextWatcher?implements?TextWatcher?{
private?TextView?view;
public?ClassOfTextWatcher(View?view)?{
if?(view?instanceof?TextView)
this.view?=?(TextView)?view;
else
throw?new?ClassCastException(
"view?must?be?an?instance?Of?TextView");
}
@Override
public?void?afterTextChanged(Editable?s)?{
if?(s.length()?<=?0)?{
switch?(view.getId())?{
case?R.id.edit1:
Toast.makeText(EditTextTest.this,?"第一個編輯框為空!",
Toast.LENGTH_LONG).show();
break;
case?R.id.edit2:
Toast.makeText(EditTextTest.this,?"第二個編輯框為空!",
Toast.LENGTH_LONG).show();
break;
case?R.id.edit3:
Toast.makeText(EditTextTest.this,?"第三個編輯框為空!",
Toast.LENGTH_LONG).show();
break;
case?R.id.edit4:
Toast.makeText(EditTextTest.this,?"第四個編輯框為空!",
Toast.LENGTH_LONG).show();
break;
case?R.id.edit5:
Toast.makeText(EditTextTest.this,?"第五個編輯框為空!",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
@Override
public?void?beforeTextChanged(CharSequence?s,?int?start,?int?count,
int?after)?{
}
@Override
public?void?onTextChanged(CharSequence?s,?int?start,?int?before,
int?count)?{
}
}
//將編輯框的光標移動到末尾
public?void?setCursorToEnd(EditText?text){
String?content?=?text.getText().toString();
text.setSelection(content.length());
}
}
寫了一個叫“ClassOfTextWatcher”的內部類,它實現了TextWatcher接口,這個內部類的構造方法中傳入View控件來獲取控件的Id。
效果圖:
總結
以上是生活随笔為你收集整理的android textwatcher 获取当前控件,TextWatcher如何找到调用它的EditText的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [vue-cli]vue-cli怎么解决
- 下一篇: win8更改计算机锁屏时间,win8如何