2013-10-28 33 views
0

我有在關鍵聽衆,而如果我使用的是textwatcher來實現我的EditText某些功能我已經在這裏完全解釋Unable to get line number on press of ENTER如何檢測不輸入使用OnkeyListner

現在的一個問題壓,我當我的光標移動到下一行時,每次都需要行號。我想,當按下回車鍵就知道了,我怎麼能做到這一點

這裏是textwatcher

scene.addTextChangedListener(new TextWatcher() {   
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) {         
        //here is your code 
       strcheck = s.toString().substring((s.length()-1),s.length()); 

       if (nowUpper) 
        strcheck = strcheck.toUpperCase(); 
       else if (nowLower) 
        strcheck = strcheck.toLowerCase(); 

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

       if(ix==1) 
       { 
        if(strcheck=="\n") 
         strcheck="a"; 
         Log.v(strcheck, strcheck); 
        ix=0; 
        scene.setText(scene.getText().toString().substring(0,scene.length()-1) + strcheck); 
        scene.setSelection(scene.getText().length()); 


       } 
       else 
       { 
       ix=1; 
       } 
       // TODO Auto-generated method stub       
       } 
      } 
     }); 
+0

您的解決方案不是找到「OnKeyListener」的替代方案。你需要弄清楚爲什麼你得到一個NPE。請注意,logcat完全告訴你什麼是null,你只需要弄清楚爲什麼你認爲它不是。 – keyser

回答

0

的代碼,你可以爲你的EditText添加OnKeyListener

myEdit.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_UP 
        && keyCode == KeyEvent.KEYCODE_ENTER) { 

       int currentLine = getCurrentLine(myEdit); 
      } 

      return false; 
     } 
    }); 

private int getCurrentLine(EditText editText) { 
    int lineNumber = 0; 
    String text = editText.getText().toString() 
      .substring(0, editText.getSelectionStart()); 

    for (int i = 0; i < text.length(); i++) { 
     if (String.valueOf(text.charAt(i)).equalsIgnoreCase("\n")) { 
      lineNumber++; 
     } 
    } 

    return lineNumber; 
} 
+0

這行是幹什麼int start = myEdit.getSelectionStart();請解釋一下 –

+0

這是光標位置,對於行數你可以調用myEdit.getLineCount() – Niko

+0

我更新了我的答案,這應該給你很大的提示,你可以修改getCurrentLine,如果你想讓它返回0作爲第一行,而不是1 – Niko

1

試試這個TextWatcher:

TextWatcher watcher = new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     checkForNewLine(s, start, count, "new line entered"); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     checkForNewLine(s, start, count, "new line deleted"); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 

    private void checkForNewLine(CharSequence s, int start, int count, String msg) { 
     int end = start + count; 
     for (int i = start; i < end; i++) { 
      if (s.charAt(i) == '\n') { 
       Log.d(TAG, msg); 
      } 
     } 
    } 
};