2017-04-06 61 views
1

我試圖在活動的軟鍵盤上添加onClick。原因是我想檢查用戶是否當前處於活動狀態。所以我所做的是,如果用戶點擊應用程序,我會重置一個不活動計時器。問題是,當用戶與軟鍵盤交互時,它不會調用功能onUserInteraction(),這是我在活動中重寫的功能。所以我需要幫助,找到一種方法來跟蹤軟鍵盤已被點擊每個文本字段等我在活動中。 (我知道我可以在每個EditText字段中插入一個onclick查找器,但是我寧願不這樣做,因爲如果我將使用許多EditText字段,它將不會那麼好)Android在活動上添加onClick軟鍵盤

+0

你能不能細說一下。當前活動的含義是什麼 - 如果應用程序已打開或用戶正在屏幕上執行操作? – Praga

+0

@Praga這意味着用戶正在屏幕上執行操作。 – Linussjo

+0

然後你不需要依賴鍵盤操作。你可以與Faa km的答案一起去。 – Praga

回答

0

所以這是我結束了。我希望有其他的東西,但是這解決了這個問題。謝謝您的幫助!

public class ActivityEditText extends android.support.v7.widget.AppCompatEditText { 
     private TextWatcher tw; 
     public ActivityEditText(Context c) 
     { 
      super(c); 
      this.setOurTCL(); 
     } 

     public ActivityEditText(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      this.setOurTCL(); 
     } 

     public ActivityEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
      super(context, attrs, defStyleAttr); 
      this.setOurTCL(); 
     } 

     private void setOurTCL() 
     { 
      this.tw = new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        InactivityManager.resetTime(); 
       } 

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

       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }; 
      this.addTextChangedListener(this.tw); 
     } 

     @Override 
     public void removeTextChangedListener(TextWatcher watcher) { 
      if(!watcher.equals(this.tw)) 
       super.removeTextChangedListener(watcher); 
     } 
    } 
0

您可以使用onUserInteraction()函數的活動。您需要在您的活動中重寫此功能。 此功能可在您與您的活動進行任何形式的互動時接聽電話。

@Override 
    public void onUserInteraction() { 
     super.onUserInteraction(); 
     // Your code goes here 
    } 

你可以參考this examplealso this answer,請參閱該文檔

希望這有助於。

+0

正如我在說明中所說的,我已經覆蓋了該方法,但它似乎沒有響應軟鍵盤的交互。 – Linussjo

+0

您可以擴展edittext來創建customedittext並在其中添加textwatcher或處理onclick來檢查您的不活動計時器 –

0

要處理單個按鍵,請根據需要實施onKeyDown()或onKeyUp()。通常,如果你想確保你只接收一個事件,你應該使用onKeyUp()。如果用戶按下並按住按鈕,則會多次調用onKeyDown()。

+0

試圖在活動上實現它。但是,與軟鍵盤 – Linussjo

+0

進行交互時,不會調用鍵盤是不同的窗口。如果您不需要跟蹤用戶輸入的內容,可以考慮在每個編輯文本中添加一個全局textWatcher,並監聽每次用戶輸入時都會調用的文本更改。 – Praga

+0

是的,我知道這個問題的解決方案。我雖然希望有一個解決方案,我可以在活動中實現,而不是每個編輯文本。但是,如果沒有這樣的解決方案,我將不得不回到那一個。 – Linussjo

0

創建一個類的一些東西一樣UserInteractionEditText,延長EditText,並設置在類的onclick lisetener使用該類中的所有XML的佈局,你使用EditText你可以做一些這樣的事:

public class UserInteractionEditText extends EditText implements View.OnClickListener { 


    public UserInteractionEditText(Context context) { 
     super(context); 
    } 

    public UserInteractionEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public UserInteractionEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 


    @Override 
    public void onClick(View v) { 
     //TODO:: Handle user Click Events 
    } 
} 
相關問題