簡體   English   中英

安卓 檢測何時打開AutoCompleteTextView彈出窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM