每当用户要从下拉列表中进行选择时,我想将 Spinner 的主 TextView
的背景颜色设置为蓝色。那么我如何知道下拉菜单何时出现和消失呢?
我认为我们可以在下拉列表出现时在 Spinner 上使用 onTouch 监听器,但我不确定当它消失时我们会做什么。
最佳答案
有一个方法可以告诉我们旋转器的状态。下面是
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("","selected")
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.d("nothing" , "unselected");
}
});
但它不会告诉你当你触摸旋转器外部时的状态。因此,要解决此问题,您必须为此实现自己的逻辑。幸运的是,luksporg 分享了 solution可以帮助你的。
public class CustomSpinner extends Spinner {
/**
* An interface which a client of this Spinner could use to receive
* open/closed events for this Spinner.
*/
public interface OnSpinnerEventsListener {
/**
* Callback triggered when the spinner was opened.
*/
void onSpinnerOpened(Spinner spinner);
/**
* Callback triggered when the spinner was closed.
*/
void onSpinnerClosed(Spinner spinner);
}
private OnSpinnerEventsListener mListener;
private boolean mOpenInitiated = false;
// implement the Spinner constructors that you need
@Override
public boolean performClick() {
// register that the Spinner was opened so we have a status
// indicator for when the container holding this Spinner may lose focus
mOpenInitiated = true;
if (mListener != null) {
mListener.onSpinnerOpened(this);
}
return super.performClick();
}
@Override
public void onWindowFocusChanged (boolean hasFocus) {
if (hasBeenOpened() && hasFocus) {
performClosedEvent();
}
}
/**
* Register the listener which will listen for events.
*/
public void setSpinnerEventsListener(
OnSpinnerEventsListener onSpinnerEventsListener) {
mListener = onSpinnerEventsListener;
}
/**
* Propagate the closed Spinner event to the listener from outside if needed.
*/
public void performClosedEvent() {
mOpenInitiated = false;
if (mListener != null) {
mListener.onSpinnerClosed(this);
}
}
/**
* A boolean flag indicating that the Spinner triggered an open event.
*
* @return true for opened Spinner
*/
public boolean hasBeenOpened() {
return mOpenInitiated;
}
}
关于android - Spinner 下拉菜单出现和消失时是否有任何事件/监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026424/