2016-12-08 72 views
0

我有以下TextWatcher定義:TextWatcher - 光標追溯到的EditText開始

_textWatcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(final Editable s) { 
      if (!s.toString().equals(_prev)) { 
       afterTextHandler.removeCallbacks(work); 
       work = new Runnable() { 
        @Override 
        public void run() {        
         if (!s.toString().equals(_prevQuoteAmount)) { 
          _prev = s.toString(); 
          doSomething(); 
         } 
         _et.append("");        
        } 
       }; 
       afterTextHandler.postDelayed(work, 1000); 
      } 
      _et.append("");     
     } 
    }; 

一切正常(有時DoSomething的()執行,有時甚至沒有,所以它的執行是不相關但在用戶在EditText組件中鍵入了一些附加了該觀察者的文本之後,文本的光標就會回到EditText的開頭。

我已經得到了以下日誌被onTextChanged()執行(或它的處理器的run()執行)後表示:

12-08 13:10:55.777 1855年至1855年/ com.android .inputmethod.latin I/LatinIME:開始輸入。光標位置= 4,4

爲什麼在執行onTextChanged()後,EditText的遊標剛好放在EditText的開頭?

編輯1: _et.append(「」)是一種黑客應該將光標帶到文本的最後一個位置。它在這裏不起作用(儘管它在其他場合起作用)。

編輯2: 約doSomething的請求的知識:

if (isReady()) { 
     Sender objSender = new Sender(); 
     objSender.setParam1(_tvParam1.getText().toString()); 
     objSender.setParam2(_tvParam2.getText().toString()); 
     objSender.setParam3(_et.getText().toString()); 
     Service.startActionSend(getActivity(), quote); 
    } 

的isReady() - 作出的網絡請求之前檢查條件(_tvParam1,_tvParam2,_et)。 Service.startActionSend() - 發出異步網絡請求(使用IntentService)。

編輯3: 只有在輸入處理程序的run()方法時纔會發生此問題。

回答

0

我不確定你在doSomething()裏面做了什麼,但是如果這以某種方式改變了光標的位置,你可以使用下面的(黑客)將光標帶到輸入文本的末尾。

mEdittext.setSelection(mEdittext.length());

+0

我已經編輯有關我已經使用的問題的代碼示例在一個黑客的一些信息。我也嘗試過你的,但無法工作。 此外,doSomething()有時會執行,有時不會,這意味着它不會影響結果。 – lionheart

+0

我可以看到你的doSomething()函數嗎?我很好奇裏面發生了什麼事。 – Swayam

+0

我編輯了這個問題,並提供了一些關於doSomething()的更多信息。謝謝。 – lionheart