2017-04-06 7 views
1

アクティビティのソフトキーボードにonClickを追加しようとしています。理由は、私は、ユーザーが現在アクティブかどうかを確認したいということです。だから私がやったことは、ユーザーがアプリをクリックすると、私は非アクティブタイマーをリセットするということです。問題は、ユーザーがソフトキーボードとやり取りするときに、アクティビティでオーバーライドする関数である関数onUserInteraction()を呼び出さないということです。だから私は、ソフトキーボードが私が活動中に持っているすべてのテキストフィールドなどのためにクリックされているかどうかを追跡する方法を見つけるために助けが必要です。 (私はすべてのEditTextフィールドにonclick listernerを挿入できることを知っていますが、私はむしろそうしません。なぜなら、多くのEditTextフィールドを使用するとすばらしいことではないからです)Android onClick onアクティビティのソフトキーボード

+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

すべての編集テキストに対して行うのではなく、editedextを拡張してcustomedittextを作成し、textwatcherを追加するか、onclickを処理して非アクティブタイマーを確認することができます –

0

個々のキーを処理するには、必要に応じてonKeyDown()またはonKeyUp()を実装します。通常、イベントを1つしか受け取らないようにするには、onKeyUp()を使用する必要があります。ユーザーがボタンを押して保持すると、onKeyDown()が複数回呼び出されます。

+0

アクティビティに実装しようとしました。しかし、ソフトキーボードと対話するときに呼び出されるのではありません – Linussjo

+0

キーボードは別のウィンドウです。ユーザーが入力している内容を追跡する必要がない場合は、すべての編集テキストにグローバルtextWatcherを追加し、ユーザーが入力するたびに呼び出されるテキストの変更をリッスンすることを検討できます。 – Praga

+0

はい、私はこの問題に対するこの解決策を認識しています。私はすべてのエディットテキストではなく、アクティビティで実装できるソリューションを期待していましたが、しかし、そのような解決策がない場合、私はその解決策に戻る必要があります。 – Linussjo

0

あなたはこのようないくつかのことを行うことができますEditText使用して、すべてのXMLレイアウトにそのクラスを使用するクラスにUserInteractionEditTextのようないくつかのものを作成し、EditTextを拡張し、そのクラスでのonclick lisetenerを設定:だから

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 
    } 
} 
関連する問題