2015-01-03 28 views
-4
public class MainActivity extends ActionBarActivity { 
    EditText edtPasscode1; 
    EditText edtPasscode2; 
    EditText edtPasscode3; 
    EditText edtPasscode4; 
    Button button1; 
    StringBuilder sb; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     edtPasscode1 = (EditText) findViewById(R.id.editText1); 
     edtPasscode2 = (EditText) findViewById(R.id.editText2); 
     edtPasscode3 = (EditText) findViewById(R.id.editText3); 
     edtPasscode4 = (EditText) findViewById(R.id.editText4); 
     button1 = (Button) findViewById(R.id.button1); 

     sb = new StringBuilder(); 
     sb.append(edtPasscode1.getText().toString()); 
     sb.append(edtPasscode2.getText().toString()); 
     sb.append(edtPasscode3.getText().toString()); 
     sb.append(edtPasscode4.getText().toString()); 

     edtPasscode1.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0 & edtPasscode1.length() == 1) { 
        sb.append(s); 
        edtPasscode1.clearFocus(); 
        edtPasscode2.requestFocus(); 
        edtPasscode2.setCursorVisible(true); 

       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 1) { 

        sb.deleteCharAt(0); 

       } 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0) { 

        edtPasscode1.requestFocus(); 
       } 
      } 
     }); 

     edtPasscode2.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0 & edtPasscode2.length() == 1) { 
        sb.append(arg0); 
        edtPasscode2.clearFocus(); 
        edtPasscode3.requestFocus(); 
        edtPasscode3.setCursorVisible(true); 

       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, 
        int arg2, int arg3) { 
       // TODO Auto-generated method stub 
       sb.deleteCharAt(0); 
      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0) { 

        edtPasscode2.requestFocus(); 
       } 
      } 
     }); 

     edtPasscode3.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0 & edtPasscode3.length() == 1) { 
        sb.append(s); 
        edtPasscode3.clearFocus(); 
        edtPasscode4.requestFocus(); 
        edtPasscode4.setCursorVisible(true); 

       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
       sb.deleteCharAt(0); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0) { 

        edtPasscode3.requestFocus(); 
       } 
      } 
     }); 


     edtPasscode4.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 
       if (sb.length() == 0 & edtPasscode4.length() == 1) { 
        sb.append(arg0); 
        edtPasscode4.clearFocus(); 

       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), sb.append(arg0).toString(), 10000).show(); 
      } 
     }); 

    } 



} 

所有edite文本視圖進入編輯文本的所有文本後,這是我的代碼,我有4個編輯文本時,我在第一編輯文本鍵光標移動到另一個編輯輸入值當輸入第二個文本時編輯文本鍵光標移動到第三個文本時輸入第三個編輯文本鍵光標移動到第四我想當我輸入第四編輯文本我想要顯示所有文本值在吐司ie edittext1.gettext()+ edittext2.gettext( )+ edittext3.gettext()+ edittext4.gettext()= 1234其中1是輸入編輯text1 2是輸入2 3是輸入3 4是輸入4分別請建議我哪裏做錯了。爲什麼它不顯示所有文本值顯示onlu 34請幫助!添加並顯示在土司的所有文本在安卓

回答

0

在你EditTextTextWatcher是你正在使用「beforeTextChanged」刪除該字符串的第一個索引值:

sb.deleteCharAt(0); 

這將刪除字符在EditText 4中輸入1和2。你不這樣做,所以你的結果包括3 & 4,如上所述。

你可能不應該使用這個。問題在於你試圖「自動」改變焦點,如果輸入了錯誤的字符,這可能是一個糟糕的用戶體驗。這似乎是你想要解釋的。

您應該不會嘗試自動將光標從一個空格移動到另一個空格,或者只是在輸入字符時「啓用」每個字符,並防止輸入超過1個字符。然後在第4個EditText上使用afterTextChanged,就像現在一樣。

編輯:

因爲你正在使用TextWatcher你不應該這樣做,除了限制輸入的字符數在「beforeTextChanged」任何東西。在「onTextChanged」中,您可以監視有效字符。你可能應該只嘗試在「afterTextChanged」中改變焦點,但即使這樣也不是真正的「推薦」,因爲嘗試鍵入2個字符(例如在鍵入「3」之後重新獲得焦點,然後簡單地鍵入「4」)可能會導致煩人/意外的用戶體驗。

編輯2:

你仍然在你的代碼中的錯誤 - 例如,你在做這個檢查「sb.length()== 0」,在你的第二個EditText上 - 但它建議立即進行刪除具有長度1 , 對?在我的回答中,我建議你不要嘗試「建立」字符串,直到Toast,因爲「請求焦點」與禁用不一樣,所以在獲得交互(UX)邏輯之前,您可能會得到奇怪的結果正確。

換句話說,你問「爲什麼它只顯示'34'」,我回答說。現在,您在構建字符串時有不同的錯誤。如果用戶「返回」到edittext並刪除一個字符,你將會有更多的錯誤,因爲你的StringBuilder總是附加並且永遠不會刪除。您還必須根據用戶的位置跟蹤要修改的「索引」。

此外,您的「afterTextChanged」代碼沒有意義 - 當StringBuilder長度爲「0」時,您嘗試「requestFocus」,但只有在您從sb中刪除時,纔會發生這種情況。所以我不確定你在做什麼,但它看起來並不像你想做的那樣。

編輯3:

這是一個應該幫助的例子。暫時不要使用StringBuilder。

edtPasscode4做到這一點:

 @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), 
       edtPasscode1.getText().toString() + 
       edtPasscode2.getText().toString() + 
       edtPasscode3.getText().toString() + 
       edtPasscode4.getText().toString() + 
       , 10000).show(); 
     } 
+0

OK讓我試試implening它 – user2794306

+0

什麼,我有這個做,我應該刪除sb.deleteCharAt(0); – user2794306

+0

我在做什麼,我必須刪除 – user2794306