Android. Detecting when a AutoCompleteTextView popup is opened

送分小仙女□ 提交于 2020-01-03 05:05:09

问题


How I can do something when popup just opens? There is a method isPopupShowing(), but nothing like onPopupShow() callback unfortunately.


回答1:


Hm, dont know if there is an easier way, and this is a bit of a workaround, but you could try adding a TextWatcher via addTextChangedListener and do a isPopupShowing() to check if popup is up. Again its a bit of workaround and wont work if you prorammatically show the popup.




回答2:


My answer could be a little bit different but it works when you have valid results.

1.- Extend your own class of 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.- We know that onFilterComplete(int count) will get notified when items are filtered (and just later shown). Introduce that in your class:

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

3.- Create an interface to notify the UI how many items are filtered every time you change text:

    interface OnContractsAvailability {
        void contractsRetrieved(int count);
    }

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

4.- Now notify your interface:

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

This is the whole class

/**
 * 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;
    }
}

This is the UI implementation

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

And these are the results

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




回答3:


I know it's late. Better late than never.

If popup is only shown when user clicks on AutoCompleteTextView, we can set OnClickListener to it and check if popup is shown.

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


来源:https://stackoverflow.com/questions/29429185/android-detecting-when-a-autocompletetextview-popup-is-opened

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!