2013-02-26 28 views
1

我想在按下Enter按鈕時在EditText中生成序列號。
詳細說明:
每次我想在edittext中首次寫一個字符時,應該以這個字符串開始 - >「1」。
後,我完成寫了一句,然後按回車鍵(新行),下一句應該用一個序列號在Edittext中生成序列號Android

例如開始: 當我的EditText寫的第一次像這樣

這是第一句話

,它應該是這樣的

1),這是第一句話

,然後當我按下ENTER鍵寫入下一個句子是這樣

這是第二個句子

應該像此

2)這是第二個句子

我嘗試寫的代碼,但有一個意外的結果,當我嘗試寫的EditText
的第一個字符這是我的全部代碼:

public class MainActivity extends Activity { 

    private EditText mET; 

    public int getCurrentCursorLine(EditText editText) 
    {  
     int selectionStart = Selection.getSelectionStart(editText.getText()); 
     Layout layout = editText.getLayout(); 

     if (!(selectionStart == -1)) { 
      return layout.getLineForOffset(selectionStart); 
     } 

     return -1; 
    } 

    private final TextWatcher mTextEditorWatcher = new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

      mET.setOnKeyListener(new View.OnKeyListener() { 

       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) { 
        // TODO Auto-generated method stub 
        int startCursor = 0; 
        startCursor = mET.getSelectionStart(); 


        if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 

         mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) "); 

         return true; 
        } 
        return false; 
       } 
      }); 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mET = (EditText) findViewById(R.id.mEditText); 

     Editable text = mET.getText(); 
     text.insert(mET.getSelectionStart(), "1.) "); 

     mET.addTextChangedListener(mTextEditorWatcher); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

這就是我的全部代碼傢伙..
通過使用上述我的代碼,結果變成這樣:

1)這是第一個句子
2.)
3.)噸他是第二句
4)
5)這是第三個句子

的問題是,它爲什麼被執行兩次?

而且,當我按下輸入按鈕插入在例如第2行一個新行,結果變成這樣:

1)這是第一個句子
2)這是所述第二句子
3.)
4.)
3)這是第二個句子
4.)
5。)這是第三句

我想在隨機行中插入新行時更新整個數字。
現在我需要你的幫助來解決它。

謝謝!

回答

0

我認爲你需要從下面的行刪除\n

mET.getText().insert(startCursor, "\n" + String.valueOf(getCurrentCursorLine(mET)+2) + ".) "); 

,因爲從鍵盤上輸入已經添加了新的生產線。之後你再次提出另一條新的路線。因此,從該行刪除"\n" +

+0

感謝您的回答。我試過了你的建議,但沒有奏效。 '\ n'是需要的,因爲當我按下'enter'鍵時,startCursor不在新行中。所以,如果我們刪除'\ n',該行仍然執行兩次,但沒有新行。 – 2013-02-26 08:03:59

0

您可能已經找到答案了,也可能沒有找到答案。但我認爲問題在於你將「mET」設置爲「onKey」,我相信這兩者都是在執行「onKeyDown」和「onKeyUp」。所以這可能是爲什麼它會執行兩次操作,因爲您正在按下並釋放輸入/ d-pad中心鍵。

所以真的,所有你需要做的就是添加之前

...keyCode == KeyEvent.KEYCODE_ENTER || KeyEvent.KEYCODE_DPAD_CENTER... 

添加這之前...

...event.getAction() == KeyEvent.ACTION_DOWN && ... 

然後添加休息。