当微调器下拉列表出现和消失时是否有任何事件/侦听器?



每当用户要从下拉列表中进行选择时,我想将微调器主TextView的背景颜色设置为蓝色。那么我怎么知道下拉菜单何时出现和消失呢?

我认为我们可以在下拉菜单出现时使用微调器上的 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已经分享了一个可以帮助您的解决方案。

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

相关内容

最新更新