[英]Android. Detecting when a AutoCompleteTextView popup is opened
彈出窗口打開后我該怎么辦? 有一個方法isPopupShowing()
,但不幸的是沒有像onPopupShow()
回調那樣的方法。
嗯,不知道是否有一個更簡單的方法,這是一個有點變通辦法的,但你可以嘗試添加TextWatcher
通過addTextChangedListener
並做isPopupShowing()
以檢查是否彈出到了。 同樣,如果您按比例顯示彈出窗口,則它有點解決方法,將無法正常工作。
我的回答可能略有不同,但是當您獲得有效結果時它會起作用。
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
以通知UI每次更改文本時會過濾多少個項目:
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;
}
}
這是UI實現
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
我知道已經晚了。 遲到總比不到好。
如果僅當用戶單擊AutoCompleteTextView
時顯示彈出窗口,我們可以將OnClickListener
設置為它,並檢查是否顯示彈出窗口。
autoCompleteTextView.setOnClickListener(v -> {
if (autoCompleteTextView.isPopupShowing()){
//Do what you want
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.