2013-10-28 2 views
0

меня возникли проблемы с по ключевому слушателю, который я полностью объяснил здесь Unable to get line number on press of ENTERКак я могу обнаружить ENTER нажимается без использования OnkeyListner

Теперь, если я использую textwatcher для реализации определенных функций на моем EditText, я требуется номер строки каждый раз, когда мой курсор переместится на следующую строку. я хочу знать, когда нажата клавиша ENTER, как я могу это сделать

здесь код 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 сообщает вам точно, что является нулевым, вам просто нужно выяснить, почему вы думали, что это не так. – keyser

ответ

0

Вы можете добавить OnKeyListener для EditText:

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); 
      } 
     } 
    } 
}; 
Смежные вопросы