弹出窗口打开时我怎么办?有一种方法isPopupShowing()
,但遗憾的是没有像onPopupShow()
回调那样。
答案 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
}