Android在活动

时间:2017-04-06 08:51:55

标签: java android

我正在尝试在软键盘上为活动添加onClick。原因是我想检查用户当前是否处于活动状态。所以我所做的是,如果用户点击应用程序,我将重置一个不活动计时器。问题是,当用户与软键盘交互时,它不会调用函数onUserInteraction(),这是我在活动中覆盖的函数。所以我需要帮助才能找到一种方法来跟踪我是否在活动中为每个文本字段等点击了软键盘。 (我知道我可以在每个EditText字段上插入一个onclick listerner,但我宁愿不这样做,因为如果我使用很多EditText字段就不会那么好了)

4 个答案:

答案 0 :(得分:0)

您可以使用onUserInteraction()活动功能。您需要在活动中覆盖此功能。 当您与活动进行任何类型的互动时,此功能会接听电话。

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

您可以参考this examplealso this answer,参考文档here

希望这有帮助。

答案 1 :(得分:0)

要处理单个按键,请根据需要实现onKeyDown()或onKeyUp()。通常,如果要确保只接收一个事件,则应使用onKeyUp()。如果用户按下并按住按钮,则多次调用onKeyDown()。

答案 2 :(得分: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
    }
}

答案 3 :(得分: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);
        }
    }