Android系统。检测何时打开AutoCompleteTextView弹出窗口

时间:2015-04-03 09:01:17

标签: android autocompletetextview

弹出窗口打开时我怎么办?有一种方法isPopupShowing(),但遗憾的是没有像onPopupShow()回调那样。

4 个答案:

答案 0 :(得分:0)

嗯,不知道是否有更简单的方法,这是一种解决方法,但您可以尝试通过TextWatcher添加addTextChangedListener并执行isPopupShowing()检查如果弹出窗口已经启动再次它的一些解决方法,如果你按照插图显示弹出窗口,它将不会工作。

答案 1 :(得分:0)

我的回答可能有点不同,但是当你有有效的结果时它会起作用。

1.-扩展您自己的AutoCompleteTextView

public class ContractsAutoCompleteTextView extends android.support.v7.widget.AppCompatAutoCompleteTextView {
    public ContractsAutoCompleteTextView(Context context) {
        super(context);
    }

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

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

}

2.-我们知道,onFilterComplete(int count)会在过滤项目时得到通知(稍后会显示)。在课堂上介绍:

    @Override
    public void onFilterComplete(int count) {
        super.onFilterComplete(count);
    }

3.-创建interface以通知用户界面每次更改文本时过滤了多少项:

    interface OnContractsAvailability {
        void contractsRetrieved(int count);
    }

    private OnContractsAvailability onContractsAvailability;
    public void setOnContractsAvailability(OnContractsAvailability onContractsAvailability) {
        this.onContractsAvailability = onContractsAvailability;
    }

4.-现在通知您的interface

    @Override
    public void onFilterComplete(int count) {
        super.onFilterComplete(count);
        if (onContractsAvailability != null) {
            onContractsAvailability.contractsRetrieved(count);
        }
    }

这是全班

/**
 * Created by rafaelruizmunoz on 07/07/2017.
 */

public class ContractsAutoCompleteTextView extends android.support.v7.widget.AppCompatAutoCompleteTextView {
    public ContractsAutoCompleteTextView(Context context) {
        super(context);
    }

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

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

    @Override
    public void onFilterComplete(int count) {
        super.onFilterComplete(count);
        if (onContractsAvailability != null) {
            onContractsAvailability.contractsRetrieved(count);
        }
    }

    interface OnContractsAvailability {
        void contractsRetrieved(int count);
    }

    private OnContractsAvailability onContractsAvailability;
    public void setOnContractsAvailability(OnContractsAvailability onContractsAvailability) {
        this.onContractsAvailability = onContractsAvailability;
    }
}

这是用户界面实施

    contractsET.setOnContractsAvailability(count -> System.out.println(String.valueOf(count)));

这些是结果

  

07-07 11:51:36.975 32174-32174 /? I / System.out:3138

     

07-07 11:51:37.520 32174-32174 /? I / System.out:1147

     

07-07 11:51:37.656 32174-32174 /? I / System.out:167

     

07-07 11:51:38.538 32174-32174 /? I / System.out:87

     

07-07 11:51:39.240 32174-32174 /? I / System.out:17

     

07-07 11:51:40.039 32174-32174 /? I / System.out:3

     

07-07 11:51:41.343 32174-32174 /? I / System.out:0

答案 2 :(得分:0)

我知道已经晚了。迟到总比不到好。

如果仅当用户单击AutoCompleteTextView时显示弹出窗口,我们可以为其设置OnClickListener并检查是否显示弹出窗口。

autoCompleteTextView.setOnClickListener(v -> {
        if (autoCompleteTextView.isPopupShowing()){
            //Do what you want
        }
    });

答案 3 :(得分:0)

if (autoCompleteText.enoughToFilter()) {
  // do something
}