1

我有一个名为 的小型计时器应用程序和 EditText 小部件,etH它们允许输入并显示时间滴答作响。单击开始按钮并启动计时器时,我通过执行以下操作来禁止交互:etMetS

btnS.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    if (calculateMS() != 0) {
        OnTimerStartButtonClicked();
        initiateTimer();
        DisableEditTexts();
                    ...

方法:

public void DisableEditTexts() {
    etH.setFocusable(false);
    etM.setFocusable(false);
    etS.setFocusable(false);
}

通过按下重置按钮,我想通过调用执行相反操作的方法来重新启用交互(将可聚焦设置为 true):

btnR.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        OnTimerResetButtonClicked();
        clearValues();
        EnableEditTexts();
        ...

问题:通过单击重置按钮,edittexts 不会成为焦点。我在最后一种方法中所做的只是

etH.setFocusable(true);
etM.setFocusable(true);
etS.setFocusable(true);

我究竟做错了什么?

4

3 回答 3

3

尝试调用EditText#setFocusableInTouchMode()

etH.setFocusableInTouchMode(true);
// etc.

当你打电话时setFocusable(false),在幕后,setFocusableInTouchMode(false)为你打电话。但是,当您调用setFocusable(true)时,幕后没有其他任何事情发生,setFocusableInTouchMode()留下false.

当你打电话setFocusableInTouchMode(true)时,会发生类似的事情,setFocusable(true)为你打电话。和以前一样setFocusableInTouchMode(false),不叫setFocuable(false)

看一看源代码,看看这个怪癖。

于 2012-10-25T15:15:20.920 回答
0

您是否尝试过调试以确保在按下重置按钮时实际调用 EnableEditTexts()?

于 2012-10-25T15:15:05.437 回答
0

尝试 _myEditText.clearFocus() 失去焦点并尝试 _myEditText.requestFocus() 重新获得它

于 2012-10-25T15:18:07.137 回答