您好,登錄后才能下訂單哦!
和我在南方一起工作的朋友說,“南北方的差異其實蠻大的。”我家在北方,也在南方工作,不過我倒是覺得差異不怎么大,因為我在北方的時候,就沒有女朋友,而來到了南方,同樣沒有女朋友。
開發時遇到一個問題,如同標題,當一個類繼承了TextWatcher時,倘若這個類中有很多EditText控件,那么如何知道調用TextWatcher的是哪一個EditText控件呢?如果一個類繼承的是OnClickListener,那可以通過View獲取控件的Id值,從而分辨控件,做對應操作。可惜TextWatcher似乎沒有類似的方法。我是這樣解決的:
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/edittext_1" /> <EditText android:id="@+id/edit2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/edittext_2" /> <EditText android:id="@+id/edit3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/edittext_3" /> <EditText android:id="@+id/edit4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/edittext_4" /> <EditText android:id="@+id/edit5" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/edittext_5" /> </LinearLayout>
很簡單,只是寫了幾個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。
效果圖:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。